WCF程序中客戶端要生成代理才能調用服務,在客戶端生成代理有多種方式,如用ChannelFactory和添加服務引用等。下面就分別來介紹下這兩種生成代理的方式。
使用ChannelFactory
使用ChannelFactory創建代理需要的條件
- 服務端點的地址,即在宿主中用程序設置的或是配置文件中設置的。
- 服務端點的綁定協議。
- 服務契約的元數據,可以將服務契約復制一份到客戶端或是在客戶端添加對服務的引用。
下面的代碼示例為通過ChannelFactory手動創建代理
EndpointAddress ea = new EndpointAddress("http://localhost:10000/Service/HelloWorldService"); IHelloWorldService proxy = ChannelFactory<IHelloWorldService>.CreateChannel(new BasicHttpBinding(),ea);
- EndpointAddress:端點地址,該類的實例作為CreateChannel方法的一個參數,實例化EndpointAddress時給的地址要和宿主中設置的地址一致。
- IHelloWorldService:這個是服務契約在客戶端的一個副本,不包含具體的實現。
- ChannelFactory:一個服務模型類型,可以產生客戶代理和基礎信道棧,使用該類的CreateChannel可以生成代理,有兩個參數,綁定類型和端點地址,綁定類型和端點地址要和宿主中設置的一致。
添加服務引用的方式
1 在宿主的配置文件中配置元數據呢交換節點,並在行為中設置serviceMetadata,如下圖:
2 在客戶端添加服務引用時必須啟動宿主。
3 配置文件設置好后,啟動宿主,然后再客戶項目上右擊選擇“Add Service Reference ”,在地址框中輸入正確地址,如下圖:
Http://localhost:10000/mex:是配置文件中的基地址http://localhost:10000加上端點地址mex組合而成。
oec2003:為服務契約中設置的屬性Name的值,如下圖:
HelloWorld:為自己定義的引用到客戶端的名稱。
4 添加服務引用后客戶端的項目列表顯示如下:
5 在客戶端添加如下代碼:
class Program { static void Main(string[] args) { HelloWorld.oec2003Client proxy = new Client.HelloWorld.oec2003Client(); Console.WriteLine(proxy.SayHello()); Console.ReadLine(); } }
6 先運行宿主,然后運行客戶程序就可以看到調用服務返回的結果。