WCF 設計和實現服務合約(01),wcf協定

來源:互聯網
上載者:User

WCF 設計和實現服務合約(01),wcf協定
WCF 術語:
• 訊息
– 訊息是一個獨立的資料單元,它可能由幾個部分組成,包括訊息本文和訊息頭。
• 服務
– 服務是一個構造,它公開一個或多個終結點,其中每個終結點都公開一個或多個服務作業。
• 終結點
– 終結點是用來發送或接收訊息(或執行這兩種操作)的構造。 終結點包括一個定義訊息可以發送到的目的地的位置(地址)、一個描述訊息應如何發送的通訊機制規範(綁定)以及對於可以在該位置發送或接收(或兩者皆可)的一組訊息的定義(服務合約)— 該定義還描述了可以發送何種訊息。

– WCF 服務作為一個終結點集合向外界公開。

小註:

WCF服務即在服務端為用戶端提供一系列方法的集合。這些方法可以是在一個類中的,也可以是包含在不同類中的。終結點即是指這些類,即一系列方法的入口。



建立服務合約: 

• 類或介面都可以定義服務合約
• 建議使用介面,因為介面可以直接對服務合約建模
• 服務合約介面具有託管介面的所有優點:
– 服務合約介面可以擴充任何數量的其他服務合約介面。
– 一個類可以通過實現服務合約介面來實現任意數量的服務合約。
– 可以通過更改介面實現來修改服務合約的實現,而讓服務合約保持不變。
– 可以通過實現舊介面和新介面來確定服務的版本。 老用戶端串連到原始版本,而新用戶端則可以串連到較新的版本。


• 定義服務合約
– 在類或介面上使用 ServiceContractAttribute 屬性標記


• 定義服務作業
 – 在方法上使用 OperationContractAttribute 屬性對其進行標記


• 參數和傳回值
– 每個操作都有一個傳回值和一個參數,即使它們為 void。 可以使用局部方法將對對象的引用從一個對象傳遞到另一個對象,但與局部方法不同的是,服務作業不會傳遞對對象的引用, 它們傳遞的只是對象的副本。
– 這一點很重要,這是因為參數或傳回值中使用的每個類型都必須是可序列化的,換言之,該類型的對象必須能夠轉換為位元組流,並能夠從位元組流轉換為對象。
– 預設情況下,基元類型是可序列化的,.NET Framework 中的很多類型都是可序列化的。


建立服務合約  服務作業的訊息模式

1、請求/回覆模式
– 通過請求/回覆模式,請求發送方(用戶端應用程式)將接收與請求相關的回覆。 這是預設的模式,因為它既支援傳入操作(一個或多個參數傳遞到該操作中 ),也 支援返回操作(該操作將一個或多個輸出值傳回給調用方)

[OperationContract]string Hello(string greeting);
–請注意,除非指定其他基礎訊息模式,否則,即使服務作業返回void(在 Visual Basic 中為 Nothing),也屬於請求/回覆訊息交換。
– 操作的結果是:除非用戶端非同步呼叫操作,否則用戶端將停止處理,直到收到返回訊息,即使該訊息正常情況下為空白時也是如此。
缺點
– 如果執行操作需要很長的時間,則會降低用戶端效能和響應能力
• 優點
– 響應訊息中可返回 SOAP 錯誤,這表明可能在通訊或處理中發生了一些與服務有關的錯誤狀況

2、單向模式

– 如果 WCF 服務應用程式的用戶端不必等待操作完成,並且不處理 SOAP 錯誤,則該操作可以指定單向訊息模式。
–  單向操作是用戶端叫用作業並在 WCF 將訊息寫入網路後繼續進行處理的操作。 通常這意味著,除非在出站訊息中發送的資料極其龐大,否則用戶端幾乎立即繼續運行(除非發送資料時出錯)。此種類型的訊息交換模式支援從用戶端到服務應用程式的類似於事件的行為。
– 若要為返回 void 的操作指定單向訊息交換,請將 IsOneWay 屬性設定為 true,預設為false.

[OperationContract(IsOneWay=true)]void Hello(string greeting);
此方法與前面的請求/回覆樣本相同,但是,將 IsOneWay屬性設定為 true 意味著儘管方法相同,服務作業也不會發送返回訊息,而用戶端將在出站訊息抵達通道層時立即返回。


3、雙工模式

– 雙工模式的特點是,無論使用單向訊息發送還是請求/回覆訊息發送方式,服務和用戶端均能夠獨立地向對方發送訊息。 對於必須直一( 接與用戶端通訊或向訊息交換的任意 方提供非同步體驗 包括類似於事件的行為)的服務來說,這種雙向通訊形式非常有用
– 由於存在與用戶端通訊的附加機制,雙向模式比請求/回覆或單向模式要略為複雜
若要設計雙向合約,還必須設計回調協定,並將該回調協定的類型分配給標記服務合約的 ServiceContractAttribute 屬性 (attribute)的 CallbackContract 屬性 (property)。
– 若要實現雙工模式,您必須建立第二個介面,該介面包含在用戶端調用的方法聲明

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples",SessionMode=SessionMode.Required,CallbackContract=typeof(ICalculatorDuplexCallback))]public interface ICalculatorDuplex{[OperationContract(IsOneWay = true)]void Clear();} public interface ICalculatorDuplexCallback{ [OperationContract(IsOneWay = true)]void Equals(double result);[OperationContract(IsOneWay = true)]void Equation(string eqn);}

小註:

• 面向服務的應用程式(例如 Windows Communication Foundation(WCF) 應用程式)設計為與 Microsoft 平台和非 Microsoft 平台上的最大可能數量的用戶端應用程式進行互操作。
• 為了獲得最大可能的互通性,建議您使用 DataContractAttribute 和DataMemberAttribute 屬性對您的類型進行標記,以建立資料合約。
• 資料合約是服務合約的一部分,用於描述您的服務作業交換的資料。

• 資料合約是可選的樣式協定:除非您顯式應用資料合約屬性,否則不會序列化任何類型或資料成員
• 資料合約與Managed 程式碼的存取範圍無關 可以對私人資料成員進行序列化,並將其發送到其他位置,以便可以公開訪問它們
• WCF 處理用於啟用操作功能的基礎 SOAP 訊息的定義,並處理資料類型到訊息本文的序列化和從訊息本文進行的還原序列化。 資料類型一旦序列化,您就無需在設計操作時考慮基礎訊息交換基礎結構
• 可以使用其他序列化機制。 標準 ISerializable, SerializableAttribute和 IXmlSerializable 機制都可用於處理資料類型到基礎 SOAP 訊息的序列化,這些訊息可將資料類型從一個應用程式帶到另一個應用程式


Out 和Ref參數

• 大部分情況下,您可以使用 in 參數(Visual Basic 中為 ByVal)、out 和 ref 參數(Visual Basic 中為 ByRef)。 由於 out 和 ref 參數都指示資料是從操作返回的,類似如下的操作簽名會指定需要請求/回覆操作,即使操作簽名返回 void 也是如此

[ServiceContract]public interface IMyContract{[OperationContract]void PopulateData(ref CustomDataType data);}
• 使用 out 或 ref 參數要求操作具有基礎響應訊息,才可以將已修改的對象傳回。 如果操作是單向操作,則將在運行時引發InvalidOerationExcetion 異常 


小註:

本文整理自:徐長龍 跟我一起從零開始學WCF系列課程(2):設計和實現服務合約 (Level 200) 教程


著作權聲明:作者:jiankunking 出處:http://blog.csdn.net/jiankunking 本文著作權歸作者和CSDN共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.