程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF從理論到實踐(5):Binding細解

WCF從理論到實踐(5):Binding細解

編輯:關於.NET

本文的出發點:

通過閱讀本文,您能了解以下知識:

WCF中的Binding是什麼?

Binding的組成?

Binding Element 的分類?

Binding描述了那些層面的信息?

選擇正確的Binding

本文適合的讀者:

本文適合WCF的初學者

WCF中的Binding是什麼?

在弄清Binding是什麼之前,我們先看一下WCF的中的Endpoint結構,一個Endpoint就類似於xml web service中的一個asmx文件,它包括三個組成部分1)Address 2) Binding 3) Contract,此三者被稱為組成Endpoint的"ABC",下圖闡述了Endpoint的組成結構:

ABC分別解決了Endpoint的如下問題:

A解決了Endpoint在哪的問題,也就是"Where is the endpoint?"

B 解決的是如何與Endpoint通訊的問題,也就是"How to communicate with endpoint?"

C解決了Endpoint提供什麼功能的問題,也就是"What functionalities do the endpoint provide?"

上面的兩篇文章WCF從理論到實踐三:八號當鋪之黑色契約和WCF從理論到實踐四:路在何方分別闡述了Contract和Address,本文著重討論Binding, Binding實現的是在客戶端和服務端進行通訊的底層細節,包括數據如何傳輸(比如采用Tcp,Http等),如何解決安全問題(SSL,Message Level Security等),傳輸的消息的格式(如text/xml,MTOM,binary等)。

Binding的組成?

Binding包括三個組成部分:NameSpace,Name和BindingElement,如下圖所示:

Name和NameSpace是服務元數據(meta date)的唯一標志,換句話說,二者就像Binding的姓名一樣,而BindingElement則描述Binding的特征,我們說Binding能解決通訊方式的問題,關鍵是靠BindingElement來進行描述。

Binding Element 的分類

Binding Element中最核心的組成部分,它分為以下三種類型

Encoding Binding Element:它用於描述傳輸數據的編碼方式,比如用text/xml進行編碼,用binary編碼,用MTOM進行編碼都是在這個上面定義,每個Binding Element必須包含一個Encoding Binding Element。

Transport Binding Element:它用於描述數據的傳輸方式,例如使用tcp進行傳輸,還是用http進行傳輸,還是用msmq,這些都是由Transport Binding Element來定

義,每一個Binding Element 必須包含一個Transport Binding Element

Protocol Binding Element: 指定諸如安全性、可靠性、上下文流設置(context flow settins)

Binding描述了哪些層面的信息

一個Binding包含著豐富的信息,每種信息都描述了服務端和客戶端交互過程中的一方面,如下表所示,Binding描述了這些層面的信息:

層次 備注說明 Transactions(事務) TransactionFlowBindingElement,用於指定事務流程 Reliability(信賴) ReliableSessionBindingElement,用於指定對會話方式 Security(安全) SecurityBindingElement,指定安全方式 Encoding(編碼) Text, Binary, MTOM, Custom,指定數據傳輸格式 Transport(傳輸) TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom,指定傳輸方式

選擇正確的Binding

Binding是可以自定義實現的,可WCF框架已經為我們實現了足夠多的Binding,供我們來選擇,如下表所示:

Binding名稱 Configuration Element 描述 BasicHttpBinding basicHttpBinding 一個指定用符合基本網絡服務規范通訊的binding,它用http進行傳輸,數據格式為text/xml WSHttpBinding wsHttpBinding 一個安全的通用的binding,但它不能在deplex中使用 WSDualHttpBinding wsDualHttpBinding 一個安全的通用的binding,但能在deplex中使用 WSFederationHttpBinding wsFederationHttpBinding 一個安全的通用的支持WSF的binding,能對用戶進行驗證和授權 NetTcpBinding netTcpBinding 在wcf應用程序中最適合跨機器進行安全通訊的binding NetNamedPipeBinding netNamedPipeBinding 在wcf應用程序中最適合本機進行安全通訊的binding NetMsmqBinding netMsmqBinding 在wcf應用程序中最適合跨機器進行安全通訊的binding,並且支持排隊 NetPeerTcpBinding netPeerTcpBinding 一個支持安全的,多機交互的binding MsmqIntegrationBinding msmqIntegrationBinding 一個用於wcf與現有msmq程序進行安全通訊的binding

下面的表格分別刪除了上表中的Binding在互操作性(Interoperability), 安全性(Security), 是否支持會話(Session), 是否支持事務(Transactions)和是否為全雙工(Duplex)上不同。

Bingding Interoperability Security Session Transactions Duplex BasicHttpBinding Basic Profile 1.1 (None), Transport, Message None, (None) None n/a WSHttpBinding WS Transport, (Message), Mixed (None), Transport, Reliable Session (None), Yes n/a WSDualHttpBinding WS (Message) (Reliable Session) (None), Yes Yes WSFederationHttpBinding WS-Federation (Message) (None), Reliable Session (None), Yes No NetTcpBinding .NET (Transport), Message Reliable Session, (Transport) (None), Yes Yes NetNamedPipeBinding .NET (Transport) None, (Transport) (None), Yes Yes NetMsmqBinding .NET Message, (Transport), Both (None) (None), Yes No NetPeerTcpBinding Peer (Transport) (None) (None) Yes MsmqIntegrationBinding MSMQ (Transport) (None) (None), Yes n/a

例外,《Programming WCF Services》有一幅圖也能說明各自的特征:

下面的圖給出了我們選擇Binding的方式

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved