關鍵詞:WCF動態呼叫、動態呼叫WCF、WCF使用動態代理精簡代碼架構、使用反射執行WCF介面
代碼地址:https://gitee.com/s0611163/DynamicWCF
DynamicWCF
介紹
動態WCF:使用動態代理精簡WCF代碼架構
軟體架構
CS架構
參考開源庫
- Autofac:一個IOC框架
- Castle.core:一個AOP框架
- NLog:日志框架
工程說明
- WCFClient:客戶端
- WCFClientProxy:客戶端WCF動態代理
- WCFCommon:通用工程,封裝日志和IOC功能
- WCFContract:WCF契約
- WCFModel:物體類
- WCFService:WCF服務端實作
- WCFServiceProxy:服務端WCF動態代理
- WCFServiceHost:WCF服務端宿主
使用說明
現有程式框架中使用的話,只需要服務端引入WCFServiceProxy.dll和WCFCommon.dll,客戶端引入WCFClientProxy.dll和WCFCommon.dll
一、 服務端
1. 參考WCFServiceProxy.dll和WCFCommon.dll
2. 服務契約添加RegisterServiceAttribute:
[RegisterService]
[ServiceContract]
public interface ITestService
說明:為什么要使用RegisterServiceAttribute?是為了兼容舊的WCF服務端和客戶端架構,以便改造現有專案,原來的架構不變,為了精簡增刪改查代碼,額外引入該框架,
3. 服務實作類繼承IService:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class TestService : ITestService, IService
4. 程式啟動時添加如下代碼:
int serverPort = int.Parse(ConfigurationManager.AppSettings["ServerPort"]);
Assembly serviceAssembly = Assembly.GetAssembly(typeof(TestService));
Assembly contractAssembly = Assembly.GetAssembly(typeof(ITestService));
string contractNamespace = "WCFContract";
HostFactory.CreateHosts(serverPort, serviceAssembly, contractAssembly, contractNamespace);
ServiceHelper.StartAllService();
注意:約定WCF契約介面名稱為服務名稱前加大寫字母I,例如服務名稱為TestService,則WCF契約介面名稱為ITestService
二、 客戶端
客戶端使用起來非常簡單
1. 參考WCFClientProxy和WCFCommon.dll
2. 使用前初始化PF工廠類:
PF.Init(ConfigurationManager.AppSettings["WCFServiceAddress"]); //初始化PF
3. 使用:
List<TestData> list = PF.Get<ITestService2>().GetBigData("001", "測驗001");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337404.html
標籤:.NET技术
