WCF入門教程(四)通過Host代碼方式來承載服務


WCF入門教程(四)通過Host代碼方式來承載服務

之前已經講過WCF對外發布服務的具體方式。 

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  

提供服務的主機。就是服務的承載者。

主要屬性:

名稱

說明

Authentication

獲取服務身份驗證行為。

Authorization

獲取所承載服務的授權行為。 

BaseAddresses

獲取所承載服務使用的基址。 

ChannelDispatchers

獲取服務主機所使用的通道調度程序的集合。 

CloseTimeout

獲取或設置允許服務主機關閉的時間間隔。

OpenTimeout

獲取或設置允許服務主機打開的時間間隔。

SingletonInstance

獲取承載服務的單一實例。

State

獲取指示通信對象當前狀態的值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

主要方法:

其方法很多,Host開啟、關閉、終止等,還支持異步操作,以及一些動作前后事件。在這里只列舉了最基本幾個方法。

名稱

說明

AddServiceEndpoint(Type, Binding, String)

使用指定的協定、綁定和終結點地址將服務終結點添加到承載服務中。

Close()

使通信對象從其當前狀態轉換到關閉狀態。 (繼承自 CommunicationObject。)

OnOpened

獲取所承載服務的服務憑據、服務身份驗證和授權行為。 (繼承自ServiceHostBase。)

Open()

使通信對象從已創建狀態轉換到已打開狀態。 (繼承自 CommunicationObject。)

 

 

ServiceEndpoint

表示允許服務的客戶端查找並與服務通信的服務的終結點。

該服務終結點包含客戶端在此終結點進行查找和與服務交互所需的地址、綁定、協定和行為信息。

屬性:

名稱

說明

Address

獲取或設置服務終結點的終結點地址。

Behaviors

獲取服務終結點的行為。

Binding

獲取或設置服務終結點的綁定。

Contract

獲取服務終結點的協定。

IsSystemEndpoint

獲取或設置是否由系統生成服務終結點而不由用戶定義服務終結點。

ListenUri

獲取或設置服務終結點偵聽的 URI。

ListenUriMode

獲取或設置傳輸處理提供給服務的供其偵聽的 URI 的方式。

Name

獲取或設置服務終結點的名稱。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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 

表示一個完整的服務的內存中說明,包括服務的所有終結點及其各自地址、綁定、協定和行為的規范。

 

名稱

說明

Behaviors

獲取與該服務關聯的行為。

ConfigurationName

獲取或設置 <service> 配置元素的名稱。

Endpoints

從服務說明獲取終結點的集合。

Name

獲取或設置服務的名稱。

Namespace

獲取或設置服務的命名空間。

ServiceType

獲取服務的類型。

 

 

 

 

 

 

 

 

 

 

 

 

 

ServiceMetadataBehavior 

控制服務元數據和相關信息的發布。

屬性

說明

ExternalMetadataLocation

獲取或設置作為服務元數據的位置的值。

HttpGetBinding

獲取或設置當傳輸為 HTTP 時用於配置元數據檢索的綁定。

HttpGetEnabled

獲取或設置一個值,該值指示是否發布服務元數據以便使用 HTTP/GET 請求進行檢索。

HttpGetUrl

獲取或設置進行 HTTP/GET 請求的元數據發布的位置。

HttpsGetBinding

獲取或設置當傳輸為 HTTPS 時用於配置元數據檢索的綁定。

HttpsGetEnabled

獲取或設置一個值,該值指示是否發布服務元數據以便使用 HTTPS/GET 請求進行檢索。

HttpsGetUrl

獲取或設置進行 HTTPS/GET 請求的元數據發布的位置。

MetadataExporter

獲取或設置用於發布服務元數據的內部 MetadataExporter 對象。

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM