.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 提供了統一性、互操作性和麵向服務的開發。
有三種不同的契約型別正在使用
- 服務契約
- 資料契約
- 操作契約
服務契約是指整個服務。
服務契約與 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”來指定模式是單向訊息模式。
雙工訊息模式的工作原理與請求/回覆模式相同,只是伺服器和客戶端彼此獨立地傳送訊息,而請求/回覆模式中的請求和回覆是同一個過程的一部分。
[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>