跳轉到內容

.NET Framework 3.0/Windows Communication Foundation 簡介

來自華夏公益教科書,自由的教科書

Windows Communication Foundation (代號:Indigo) 是一個新的 Windows Vista 框架,旨在簡化計算機或網路中多個計算機之間的應用程式通訊。

它是 .NET Framework 3.0 中引入的四個主要應用程式開發介面之一。它與 Microsoft Windows XP、Windows 2003、Windows Longhorn Server 和 Microsoft Windows Vista 相容。

Windows Communication Framework (WCF) 結合了 .NET Remoting、Web 服務、分散式事務和訊息佇列的功能。

WCF 使用 SOAP 訊息進行通訊。當 WCF 程序與非 WCF 程序通訊時,SOAP 訊息使用基於 XML 的編碼,但當它與另一個 WCF 程序通訊時,SOAP 訊息使用最佳化的二進位制格式進行編碼。

WCF 服務

[編輯 | 編輯原始碼]

WCF 服務由三個元件組成:一個服務,它實現要提供的服務;一個主機環境,服務執行在其中;以及一個或多個端點契約

WCF 提供了統一性、互操作性和麵向服務的開發。

契約型別

[編輯 | 編輯原始碼]

有三種不同的契約型別正在使用

  • 服務契約
  • 資料契約
  • 操作契約

服務契約

[編輯 | 編輯原始碼]

服務契約是指整個服務。

服務契約與 Web 服務不同,它只是服務的一部分。

.

服務契約是一組被指定為操作的類。服務契約具有“服務契約”標籤,如以下示例所示。


[ServiceContract]
interface IMa
{


它透過不同的類執行多個操作。每個類都被指定為一個“操作”。

類可以用作服務契約,但通常建議使用介面。將類用作“服務契約”的優點包括速度和簡單性。但是,管理類不支援繼承,無法同時執行服務契約的所有操作。

在服務契約中使用引數是有益的,因為服務契約通常傳遞值而不是對值的引用。服務契約使用的原始資料型別預設情況下是可序列化的。

資料契約

[編輯 | 編輯原始碼]

資料契約通常用於指定契約中使用的資料成員。資料成員用“資料成員”屬性標記。未指定為“資料成員”的成員是允許的,但它們不屬於契約的一部分,也不能被實現。

語法

DataContract 屬性的語法是

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum, Inherited=false, AllowMultiple=false)] 
public sealed class DataContractAttribute : Attribute


示例

[DataContract]
public class CustomerDetails
{
    //Serialized Member//
    [DataMember]
    public string CustomerName;

    //Serialized Member//
    [DataMember]
    private int Age;

    // This is not serialized because the DataMemberAttribute 
    // has not been applied.
    private string CustomerMailID;

}

操作契約

[編輯 | 編輯原始碼]

操作契約是服務契約的組成部分。服務契約中的每個方法都用操作契約屬性標記。只有被指定為操作的方法才被視為服務的一部分。

語法

[AttributeUsageAttribute(AttributeTargets.Method)] 
public sealed class OperationContractAttribute : Attribute


訊息契約

[編輯 | 編輯原始碼]

除了這三種契約型別之外,還有訊息契約,它允許我們輸入引數或返回值。訊息契約使序列化資料變得更容易,因此不需要詳細瞭解 SOAP。

要顯示為 SOAP 標頭的元件將使用 MessageHeader 屬性指定,而 SOAP 主體成員將使用 MessageBodyMember 屬性指定。


語法

[MessageContract]
public class ABC
{
  [MessageHeader] A;
  [MessageHeader] B;
  [MessageBodyMember] C;
  [MessageBodyMember] D;
  [MessageBodyMember] E;
}

契約模式

[編輯 | 編輯原始碼]

WCF 程式設計模型中指定了三種類型的契約


  • 請求/回覆訊息模式
  • 單向訊息模式
  • 雙工訊息模式

請求/回覆訊息模式

[編輯 | 編輯原始碼]

請求/回覆訊息模式是指客戶端的請求後面跟著伺服器的回覆。在這裡,客戶端可以將引數值傳送到伺服器,同時伺服器可以將返回值傳遞給客戶端。

但是,這種模式有很大的弊端。如果函式沒有順序,那麼每個語句都被視為請求或回覆。這將包括那些不返回值的語句。

單向訊息模式

[編輯 | 編輯原始碼]

在這裡,客戶端發出請求,伺服器做出響應,客戶端函式無論伺服器是否收到任何訊息。

在這裡,服務不需要關心 SOAP 錯誤。通常,服務不會等待應用程式處理。

單向訊息模式與請求-回覆模式相同,只是我們將“IsOneWay”屬性設定為“true”來指定模式是單向訊息模式。

雙工訊息模式

[編輯 | 編輯原始碼]

雙工訊息模式的工作原理與請求/回覆模式相同,只是伺服器和客戶端彼此獨立地傳送訊息,而請求/回覆模式中的請求和回覆是同一個過程的一部分。

一個 WCF 服務程式碼示例

[編輯 | 編輯原始碼]
[ServiceContract]
class HelloService 
{ 
  [OperationContract]
  [PrincipalPermission(SecurityAction.Demand, 
    Role = “Adminstrators")]
  [TransactionFlow(TransactionFlowOption.Mandatory)]
  [OperationBehavior(TransactionScopeRequired = true,
    TransactionAutoComplete = true)]
  String Hello(String Greeting) {return Greeting;}
}

<bindings>
  <wsHttpBinding>
    <binding name="Binding1“  transactionFlow="true">
      <security mode="Message">
        <message clientCredentialType="Windows“/>
      </security>
      <reliableSession enabled="true" />
    </binding>
  </wsHttpBinding>
</bindings>

參考資料

[編輯 | 編輯原始碼]
  1. http://msdn2.microsoft.com/en-us/library/ms733127.aspx
  2. http://msdn2.microsoft.com/en-us/library/ms733127.aspx
華夏公益教科書