1.什么是WCF
Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程序框架,可以翻譯為Windows 通訊開發平台。整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。是Windows平台上開發分布式應用最佳的實踐方式。
2.WCF基本概念
地址:定義服務的地址
綁定:定義服務的通訊方式(傳輸協議、編碼方案)
契約:定義服務的具體實現
終結點:由地址、綁定和契約共同構成一個終結點,服務器通過終結點向客戶端公開服務,客戶端通過終結點調用服務。
【服務提供端】
下面通過簡單的服務實例來了解WCF?
1.首先新建一個項目,然后新建一個類庫【IBLL】,在類庫中新建一個接口【IUserInfoService】。並添加【System.ServiceMode】引用。
[ServiceContract]//服務契約(僅僅對類、接口) public interface IUserinfoService { //這個契約相當於webService中的WebMethod [OperationContract]//操作契約 int Add(int a, int b); }
2.然后在新建一個類庫,並新建一個類【UserInfoService】,這個類添加子【IBLL】的引用。這個類實現【IUserInfoService】接口。
public class UserInfoService: IUserinfoService { public int Add(int a,int b) { return a + b; } }
3.新建一個【控制台應用程序】,命名為【Host】。
4.然后在【App.config】中進行配置。
server節點中的name是具體服務的實現,我們具體服務的實現時BLL層中的UserInfoService。還需要在baseAddress中配置服務的地址。最后配置服務的契約,在contract屬性中配置服務契約,契約是IBLL層中的IuserInfoService接口契約。如果過需要配置多個服務,在services節點中繼續配置service節點即可。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <!--name:具體服務的實現 behaviorConfiguration:服務行為的配置 --> <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration"> <host> <baseAddresses> <!--服務的地址--> <add baseAddress="http://localhost:8000/"/> </baseAddresses> </host> <!--服務契約--> <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserinfoService"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="behaviorConfiguration"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
5.在【Program.cs】的Main函數中編寫代碼,在這里也需要添加對ServiceModel的引用。
using (ServiceHost host=new ServiceHost(typeof(BLL.UserInfoService))) { //打開服務 host.Open(); Console.WriteLine("服務打開成功!"); Console.ReadKey();
//關閉服務
host.close(); }
6.最后運行程序即可,只有程序運行客戶端才能調用。
7.測試:如果控制器已經成功運行,我們可以打打開瀏覽器輸入服務地址:【http://localhost:8000/】,瀏覽器中會打開我們的服務頁面,如果能正常顯示,說明我們的服務已經啟動成功,客戶端可通過該地址訪問我們的服務了。我們將創建一個客戶端來訪問我們的服務。
【調用服務-客戶端】:第一種方法
1.在同一個解決方案下,新建一個【控制台應用程序】,然后我們使用微軟提供的Svcutil工具生成FirstService服務的客戶端代理類。可以在菜單中找到【VS2015的MSBuild命令提示符】/【VS2015開發人員命令提示】等工具,以管理員身份運行。
2.跳轉到我們需要在哪個文件加生成FirstService服務的客戶端代理類。
切換到E盤:【e:】
切換目錄:【cd: E:\面向服務通信技術\WCF_Server_1\WCF_Client】
然后輸入以下命令:svcutil http://localhost:8000/?wsdl /o:userinfoServiceClientt.cs
(執行成功后,會在解決方案目錄下生成兩個文件:userinfoServiceClientt.cs 和 outout.config)
3.我們可以將上面的3個文件夾展開,系統就會將隱藏的文件給顯示出來。
這時我們右擊隱藏的文件,點擊【包含在項目中】即可。
4.然后將這個當前自帶的【App.config】的文件刪除,將【output.config】文件重命名為【App.config】接口。我們需要在【WCF_Client】添加對ServiceModel的引用。最后在【Program.cs】中的Main函數寫以下代碼。
UserinfoServiceClient client = new UserinfoServiceClient(); Console.WriteLine(client.Add(10,20)); Console.ReadKey();
【調用服務-客戶端】:第二種方法
這種方法跟WebService調用的方法一樣~
1.在同一個解決方案下,新建一個【控制台應用程序】。然后添加【服務引用】
2.然后輸入服務地址,點擊轉到,可以看到有以下服務【UserinfoService】。然后點擊確定即可。
3.最后在【Program.cs】中的Main函數寫以下代碼。
ServiceReference.UserinfoServiceClient client = new ServiceReference.UserinfoServiceClient(); int sum=client.Add(10, 20); Console.WriteLine(sum.ToString()); Console.ReadKey();
4.最后運行測試即可