標籤:
前言:
- 在前面的文章中,我們定義的服務合約上都會有一個ServiceContract的特性來修飾,這是因為服務契約的實現要靠ServiceContractAttribute 屬性定義,然後使用一個或多個類(或介面)方法中的 OperationContractAttribute 屬性定義協定的服務作業。 實現服務合約後並將其與WCF 綁定和 EndpointAddress 對象一起使用時,此服務合約將公開以供用戶端使用。
- 公開的資訊由 ServiceContractAttribute 表示,其介面與 Web 服務描述語言 (WSDL) <portType> 元素鬆散相關。 服務合約可用於服務端以指定服務端點向調用方公開的內容。 它也可以在用戶端使用,以指定用戶端與終結點通訊的協定
WSDL(Web Service Description Language)Web伺服器描述語言是用XML文檔來描述Web服務的標準,是Web服務的介面定義語言,由Ariba、
Intel、IBM、MS等共同提出,通過WSDL,可描述Web服務的三個基本屬性:
服務做些什麼——服務所提供的操作(方法)
如何訪問服務——和服務互動的資料格式以及必要協議
服務位於何處——協議相關的地址,如URL
在WCF中,WSDL是中繼資料交換的一種資料格式,通過它的描述,WCF服務程式間就可以進行相應的資料交換,甚至是跨平台的應用間也可以進行資料交換。
服務合約的屬性:
當我們在服務契約介面上加上ServiceContract修飾時,可以看到它有兩個建構函式,一個是沒有參數的。還有一個擁有以下參數:
- Name:擷取或設定 Web 服務描述語言 (WSDL) 中的 <portType> 元素的名稱。設定此名稱後,預設產生的代理類為該名稱+Client。
- Namespace:擷取或設定 Web 服務描述語言 (WSDL) 中的 <portType> 元素的命名空間。
- ConfigurationName:用於尋找應用程式設定檔中的服務元素的名稱。 預設值是服務實作類別的名稱。
- ProtectionLevel:使用 ProtectionLevel 屬性指定協定綁定對公開協定的終結點要求的加密和/或數位簽章的程度。 在此設定的值是為包括錯誤在內的所有操作訊息提供的預設值。
- SessionMode:擷取或設定是否允許、不允許或要求會話。使用 SessionMode 屬性來要求在終結點之間支援會話的綁定。 會話就是將在兩個或多個終結點之間交換的訊息集相互關聯的方式。 如果您的服務支援通道會話,則可以使用 InstanceContextMode 屬性指定您的服務合約實現執行個體與通道會話執行個體之間的關係。 如果綁定不支援會話,則會引發異常。
- CallbackContract:擷取或設定當協定為雙向合約時的回調協定類型。在 CallbackContract 屬性中指定一個介面,該屬性工作表示雙向(雙工)訊息交換中所需的反向協定。 這使得用戶端應用程式能夠偵聽入站操作調用,該調用可以由伺服器端服務應用程式獨立於用戶端活動進行發送。 具有單向操作的回調協定表示從用戶端可以處理的服務發出的調用。
WCF服務合約樣本:
WcfService:WCF服務應用程式。為簡單說明,我們將別的代碼刪除,只留下GetData方法。IService1.cs的代碼如下:
using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;using System.Text;using System.Net.Security;namespace WcfService{ [ServiceContract(Name="WcfServiceContract", Namespace="http://wangweimutou.WcfServiceContract", SessionMode=SessionMode.Allowed, ProtectionLevel=ProtectionLevel.None, ConfigurationName="Service1")] public interface IService1 { [OperationContract] string GetData(int value); }}
Service1.svc的代碼如下:
using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;using System.Text;namespace WcfService{ public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } }}
點擊Service1.svc在瀏覽器中,我們可以查看它的WSDL檔案,由於本文只注重講服務合約的屬性。所以我們就把WSDL當成普通的XML檔案來看,從中可以看到部分設定
的屬性已經改變了,至於別的屬性應用,可以查看WCF初探-5:WCF訊息交換模式之雙工通訊(Duplex)和WCF初探-13:WCF用戶端為雙工服務建立回調對象兩篇博文。
WCF初探-14:WCF服務合約