首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

《WCF 技術內幕》翻譯 18:第 1 部分 第 4 章 WCF 101 — 從外部剖析 WCF (ABC 與端點)

     編輯:關於.NET

端點三要素:Address、Binding、Contract

Endpoints、Addresses、Bindings、Contracts、Behaviors 關係圖

Address 位址

  • 接收端:System.Uri 建構監聽位址。
  • 發送端:System.ServiceModel.EndpointAddress 封裝 WS-Addressing EndpointReference,包含 To、Action、MessageID、ReplyTo 等標頭。
  • Scheme 名稱 (http、net.tcp、net.pipe) 決定傳輸協定。

Binding 繫結

繫結 = 通道層工廠元素集合。所有繫結繼承 Binding,暴露 CreateBindingElements() 回傳 BindingElement 陣列。

九大內建繫結元素分解

BasicHttpBinding       → TextMessageEncoding + HttpTransport
NetNamedPipeBinding    → TransactionFlow + BinaryMessageEncoding + WindowsStreamSecurity + NamedPipeTransport
NetTcpBinding          → TransactionFlow + BinaryMessageEncoding + WindowsStreamSecurity + TcpTransport
WSDualHttpBinding      → TransactionFlow + ReliableSession + SymmetricSecurity + CompositeDuplex + OneWay + TextMessageEncoding + HttpTransport
WSHttpBinding          → TransactionFlow + SymmetricSecurity + TextMessageEncoding + HttpTransport
NetMsmqBinding         → BinaryMessageEncoding + MsmqTransport
MsmqIntegrationBinding → MsmqIntegrationBindingElement
WSFederationHttpBinding→ TransactionFlow + SymmetricSecurity + TextMessageEncoding + HttpTransport
NetPeerTcpBinding      → PnrpPeerResolver + BinaryMessageEncoding + PeerTransport

繫結決定訊息屬性,選擇正確繫結對成功實現 WCF 系統至關重要。第 8 章詳細介紹。

Contract 契約

將物件導向結構映射為訊息結構。三種契約:

  1. Service Contract:[ServiceContract] 介面/類別 + [OperationContract] 方法。描述操作名稱、參數、MEP、Session、安全標頭。
  2. Data Contract:[DataContract] + [DataMember]。映射 .NET 型別至 SOAP Body Schema。
  3. Message Contract:[MessageContract] + [MessageHeader]/[MessageBodyMember]。完全控制 SOAP Header 與 Body 結構。

代碼範例

[ServiceContract]
interface ISomeServiceContract {
    [OperationContract]
    void SomeOperation(SomeDataContract info);

    [OperationContract]
    void SomeOtherOperation(SomeMessageContract info);
}

[DataContract]
class SomeDataContract {
    [DataMember] public int? Number { get; set; }
    [DataMember] public string Status { get; set; }
}

[MessageContract]
class SomeMessageContract {
    [MessageHeader] public int? SomeNumber;
    [MessageBodyMember] public SomeDataContract MessageBody;
}

晚期繫結特性

契約以屬性標記型別,屬於晚期繫結——不一致性僅在運行時透過反射檢查發現。雖提供擴展性,但需謹慎測試。

Metadata Exchange

  • 預設關閉中繼資料發布(安全考量)。
  • 啟用:ServiceMetadataBehavior.HttpGetEnabled = true + 加入 IMetadataExchange 端點。
  • svcutil.exe 依 WS-MetadataExchange 產生 Proxy 代碼與配置檔 (output.config),實現跨 AppDomain/Machine 呼叫。

註釋:早/晚期繫結

  • 早期繫結:編譯期型別檢查、IntelliSense、效能佳。
  • 晚期繫結:運行期檢查、型別可動態變更、支援動態語言特性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved