1.什麼是WCF。WCF是Windows Communication Fundation的縮寫,是微軟在.net 3.0 的時候引進的,用於開發可交互的分佈式應用程序,是由微軟發展的一組數據通訊的應用程序開發接口,能夠翻譯爲Windows通信接口,它是.NET框架的一部分。WCF的最終目標是經過進程或不一樣的系統、經過本地網絡或是經過Internet收發客戶和服務之間的消息。WCF合併了Web服務、.net Remoting、消息隊列和Enterprise Services的功能並集成在Visual Studio中。WCF專門用於面向服務開發。java
2.爲何要用WCF。有以下狀況,咱們要爲兩個客戶端提供一個服務,一個是java客戶端,須要經過http提供xml格式的數據,另外一個.net 客戶端,爲了有更好的性能,.net 客戶端須要服務經過tcp協議提供二進制數據。這時候WCF就派上用場了。若是沒有WCF,爲了達到上面的目的,咱們須要給java客戶端實現一個ASMX WebService,給.net 客戶端實現一個remoting service。這徹底是兩種不一樣的技術,實現起來相對來講麻煩不少。windows
3.建立一個wcf服務網絡
場景實踐:爲了給java 和.net 兩個客戶端提供他們須要的服務,咱們須要實現兩個東西,一個是WebService 一個是 .net Remoting ,雖然他們的功能是同樣的。框架
接下去是WCF的實現方式:tcp
從圖中能夠知道,咱們只須要寫一個服務,而後配置兩個Endpoint便可知足需求。分佈式
首先,建立一個解決方案,添加一個新類庫,取名HelloService性能
而後,刪除vs 自動生成的Class1.cs 再添加一個WCF服務 新項(右上角能夠搜索)取名HelloService。spa
肯定以後咱們看一下項目目錄結構。.net
首先是引用這塊。vs 自動添加了對System.ServiceModel 命名空間的引用,這個是WCF的核心命名空間。翻譯
而後是vs生成了2個文件,一個HelloService 一個 IHelloService。
讓咱們來看一下這兩個文件。
首先是IHelloService文件
[ServiceContract] public interface IHelloService { [OperationContract] void DoWork(); }
看名字就知道這是一個接口,接口所具備的ServiceContract 特性來自於ServiceModel 命名空間,接口裏麪包含一個方法定義,DoWork(),方法有一個OperationContract特性也是來自ServiceModel 。
接下去是HelloService文件
public class HelloService : IHelloService { public void DoWork() { } }
只是簡單的實現了IHelloService 接口。
如今,咱們對兩個文件作些修改,來實現咱們本身的服務。
把IHelloService 改爲以下:
[ServiceContract] public interface IHelloService { [OperationContract] string GetMessage(string name); }
即刪除了原先的DoWork方法,改爲一個返回String類型的GetMessage方法,傳入一個name參數。
相應的,HelloService也要變。
public class HelloService : IHelloService { public string GetMessage(string name) { return "Hello " + name; } }
咱們實現了裏面的GetMessage方法,讓他返回咱們須要字符串。
至此,建立工做就已完成,接下去就是在控制檯程序中託管這個服務。須要說明一點,WCF的託管對象能夠是Winform,Console ,或者IIS,或者windows 服務以及其餘。爲了簡化問題,這裏選中託管到Console控制檯應用程序中。託管對象就是宿主。
首先,在當前解決方案中新添加一個控制檯項目,取名HelloServiceHost。
而後,要對這個Host添加兩個引用,一個上面的System.ServiceModel,另外一個是上面的WCF項目。
而後會獲得以下的引用目錄。
爲了託管這個WCF服務,咱們須要給項目添加一個配置文件,用於託管這個WCF服務。
右鍵HelloServiceHost項目,選擇添加新項,應用程序配置文件,名字就是默認的App.config