WCF入門教程(四)通過Host代碼方式來承載服務
之前已經講過WCF對外發布服務的具體方式。
Host承載,可以是web,也可以是控制台程序等等。比WebService有更大的使用空間。具體承載的簡單框圖如下:
通過服務終結點,然后通過Host承載這些終結點,這樣客戶端就可以訪問這些服務了。
一個服務可以添加多個終結點,終結點中定義了Address,Binding和Contract。
而且還可以針對終結點定義一定的行為。
下面給出簡單實例,通過ServiceHost來承載相關服務。
#region 采用代碼方式實現對契約的綁定 Uri baseAddress = new Uri("http://127.0.0.1:9999/"); using (ServiceHost host = new ServiceHost(typeof(CalculatorService), baseAddress)) { Binding wsBinding = new WSHttpBinding(); NetTcpBinding tcpBinding = new NetTcpBinding(); //提供安全傳輸 tcpBinding.Security.Mode = SecurityMode.Transport; //需要提供證書 tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate; //添加多個服務終結點 //使用指定的協定、綁定和終結點地址將服務終結點添加到承載服務中 ServiceEndpoint svEndpiont = host.AddServiceEndpoint(typeof(ICalculator), wsBinding, "CalculatorService"); //netTcp協議終結點 host.AddServiceEndpoint(typeof(ICalculator), tcpBinding, "net.tcp://127.0.0.1:8888/CalculatorServiceTcp"); #region 添加行為 //元數據發布行為 ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); //支持get請求 behavior.HttpGetEnabled = true; behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/CalculatorService/metadata"); //設置到Host中 host.Description.Behaviors.Add(behavior); #endregion host.Opened += delegate { Console.WriteLine("CalculaorService已經啟動,按任意鍵終止服務!"); }; //服務啟動 host.Open(); Console.Read(); } #endregion
如果已經很了解這些類型的使用了,后面的內容可以直接略過。
ServiceHost
提供服務的主機。就是服務的承載者。
主要屬性:
名稱 |
說明 |
獲取服務身份驗證行為。 |
|
獲取所承載服務的授權行為。 |
|
獲取所承載服務使用的基址。 |
|
獲取服務主機所使用的通道調度程序的集合。 |
|
獲取或設置允許服務主機關閉的時間間隔。 |
|
獲取或設置允許服務主機打開的時間間隔。 |
|
獲取承載服務的單一實例。 |
|
獲取指示通信對象當前狀態的值。 |
主要方法:
其方法很多,Host開啟、關閉、終止等,還支持異步操作,以及一些動作前后事件。在這里只列舉了最基本幾個方法。
名稱 |
說明 |
使用指定的協定、綁定和終結點地址將服務終結點添加到承載服務中。 |
|
使通信對象從其當前狀態轉換到關閉狀態。 (繼承自 CommunicationObject。) |
|
獲取所承載服務的服務憑據、服務身份驗證和授權行為。 (繼承自ServiceHostBase。) |
|
使通信對象從已創建狀態轉換到已打開狀態。 (繼承自 CommunicationObject。) |
ServiceEndpoint
表示允許服務的客戶端查找並與服務通信的服務的終結點。
該服務終結點包含客戶端在此終結點進行查找和與服務交互所需的地址、綁定、協定和行為信息。
屬性:
名稱 |
說明 |
獲取或設置服務終結點的終結點地址。 |
|
獲取服務終結點的行為。 |
|
獲取或設置服務終結點的綁定。 |
|
獲取服務終結點的協定。 |
|
獲取或設置是否由系統生成服務終結點而不由用戶定義服務終結點。 |
|
獲取或設置服務終結點偵聽的 URI。 |
|
獲取或設置傳輸處理提供給服務的供其偵聽的 URI 的方式。 |
|
獲取或設置服務終結點的名稱。 |
Binding
包含綁定元素,這些元素指定客戶端和服務之間的通信所用的協議、傳輸和消息編碼器。
這李只給出幾種常見的綁定類型,不深入展開
具體綁定規則根據具體需求而定。
Binding名稱 |
Configuration Element |
描述 |
BasicHttpBinding |
basicHttpBinding |
一個指定用符合基本網絡服務規范通訊的binding,它用http進行傳輸,數據格式為text/xml |
WSHttpBinding |
wsHttpBinding |
一個安全的通用的binding,但它不能在deplex中使用 |
WSDualHttpBinding |
wsDualHttpBinding |
一個安全的通用的binding,但能在deplex中使用 |
WSFederationHttpBinding |
wsFederationHttpBinding |
一個安全的通用的支持WSF的binding,能對用戶進行驗證和授權 |
NetTcpBinding |
netTcpBinding |
在wcf應用程序中最適合跨機器進行安全通訊的binding |
NetNamedPipeBinding |
netNamedPipeBinding |
在wcf應用程序中最適合本機進行安全通訊的binding |
NetMsmqBinding |
netMsmqBinding |
在wcf應用程序中最適合跨機器進行安全通訊的binding,並且支持排隊 |
NetPeerTcpBinding |
netPeerTcpBinding |
一個支持安全的,多機交互的binding |
MsmqIntegrationBinding |
msmqIntegrationBinding |
一個用於wcf與現有msmq程序進行安全通訊的binding |
ServiceDescription
表示一個完整的服務的內存中說明,包括服務的所有終結點及其各自地址、綁定、協定和行為的規范。
名稱 |
說明 |
獲取與該服務關聯的行為。 |
|
獲取或設置 <service> 配置元素的名稱。 |
|
從服務說明獲取終結點的集合。 |
|
獲取或設置服務的名稱。 |
|
獲取或設置服務的命名空間。 |
|
獲取服務的類型。 |
ServiceMetadataBehavior
控制服務元數據和相關信息的發布。
屬性 |
說明 |
獲取或設置作為服務元數據的位置的值。 |
|
獲取或設置當傳輸為 HTTP 時用於配置元數據檢索的綁定。 |
|
獲取或設置一個值,該值指示是否發布服務元數據以便使用 HTTP/GET 請求進行檢索。 |
|
獲取或設置進行 HTTP/GET 請求的元數據發布的位置。 |
|
獲取或設置當傳輸為 HTTPS 時用於配置元數據檢索的綁定。 |
|
獲取或設置一個值,該值指示是否發布服務元數據以便使用 HTTPS/GET 請求進行檢索。 |
|
獲取或設置進行 HTTPS/GET 請求的元數據發布的位置。 |
|
獲取或設置用於發布服務元數據的內部 MetadataExporter 對象。 |