1. 程式人生 > 其它 >WCF 動態呼叫

WCF 動態呼叫

關鍵詞:WCF動態呼叫、動態呼叫WCF、WCF使用動態代理精簡程式碼架構、使用反射執行WCF介面

程式碼地址:https://gitee.com/s0611163/DynamicWCF

DynamicWCF

介紹

動態WCF:使用動態代理精簡WCF程式碼架構

軟體架構

CS架構

引用開源庫

  1. Autofac:一個IOC框架
  2. Castle.core:一個AOP框架
  3. NLog:日誌框架

工程說明

  1. WCFClient:客戶端
  2. WCFClientProxy:客戶端WCF動態代理
  3. WCFCommon:通用工程,封裝日誌和IOC功能
  4. WCFContract:WCF契約
  5. WCFModel:實體類
  6. WCFService:WCF服務端實現
  7. WCFServiceProxy:服務端WCF動態代理
  8. 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");