2009年2月11日 星期三

Binding (1) : BasicHttpBinding

WCF 中,最複雜的,我認為應該是 Binding 了。
要選擇適當的 binding, 通常要了解一堆的 WS-* 的標準,配合客戶需求,剔除不必要的選項後,才是我們適合的 binding.

那什麼是 Binding 呢?
Binding 定義了客戶端與伺服器端的「溝通方式」,主要有下列三大類(但不限)

  1. Transport Protocol: Http, Tcp, Msmq, etc
  2. Message format: Xml, Mtom, Json, binary, etc
  3. Message protocols: Soap, WS-*, none, etc

WCF 內建提供的 Binding, 目前已達12 種了。如果都不適用,還可以自訂 CustomBinding

那要如何選擇呢?有沒一個建議的流程呢?在 patterns & practices Improving Web Services Security Guide 中有簡略描述。以下就嘗試翻譯並整理一下!

<basicHttpBinding>
<binding
allowCookies="Boolean"
bypassProxyOnLocal="Boolean"
closeTimeout="TimeSpan"
envelopeVersion="None/Soap11/Soap12"
hostNameComparisonMode="StrongWildCard/Exact/WeakWildcard"
maxBufferPoolSize="Integer"
maxBufferSize="Integer"
maxReceivedMessageSize="Integer"
messageEncoding="Text/Mtom"
name="string"
openTimeout="TimeSpan"
proxyAddress="URI"
receiveTimeout="TimeSpan"
sendTimeout="TimeSpan"
textEncoding="UnicodeFffeTextEncoding/Utf16TextEncoding/Utf8TextEncoding"
transferMode="Buffered/Streamed/StreamedRequest/StreamedResponse"
useDefaultWebProxy="Boolean"
<security mode="None/Transport/Message/TransportWithMessageCredential/TransportCredentialOnly">
<transport clientCredentialType="None/Basic/Digest/Ntlm/Windows/Certificate"
proxyCredentialType="None/Basic/Digest/Ntlm/Windows"
realm="string" />
<message
algorithmSuite="Basic128/Basic192/Basic256/Basic128Rsa15/Basic256Rsa15/TripleDes/TripleDesRsa15/Basic128Sha256/Basic192Sha256/TripleDesSha256/Basic128Sha256Rsa15/Basic192Sha256Rsa15/Basic256Sha256Rsa15/TripleDesSha256Rsa15"
clientCredentialType="UserName/Certificate"/>
</security>
<readerQuotas maxDepth="Integer"
maxStringContentLength="Integer"
maxByteArrayContentLength="Integer"
maxBytesPerRead="Integer"
maxNameTableCharCount="Integer" />
</binding>
</basicHttpBinding>


basicHttpBinding



  1. 與 ASMX web service 相容,即WS-I Basic Profile 1.1

  2. 預設沒有實作安全相關標準。如果需要安全,則需要設定 Security.Mode

  3. 在沒有安全性的要求下,(即 <scurity mode=’none’> 或 Security.Mode 設為 BasicHttpSecurityMode.None),basicHttpBinging使用了 TextMessageEncodingBindingElementHttpTransportBindingElement 這兩個 binding element。TextMessageEncodingBindingElement 將訊息格式化為與 SOAP 相容。HttpTransportBindingElement 則將訊息以 http protocol 傳送。因此,在basicHttpBinding 中,可以看到TextMessageEncodingBindingElementHttpTransportBindingElement 相關的 configuration schema.

  4. 若要使用 SSL, 即要以 HTTPS 來傳送訊息,則需設定<scurity mode=’Transport’>,此時 HttpTransportBindingElement會被 HttpsTransportBindingElement 所取代。事實上HttpsTransportBindingElement 繼承HttpTransportBindingElement,所以只有多了一些功能。

  5. BasicHttpBinding 可以使用於 IIS5 或 IIS6 上

  6. messageEncoding=”Mtom” 時,會將 TextMessageEncodingBindingElementMtomMessageEncodingBindingElement 取代。MTOM 編碼方式 實作了 W3C SOAP Message Transmission Optimization Mechanism, 用於以SOAP格式傳輸 binary 資料如附件、圖片,以降低訊息的大小。


 

沒有留言:

Share with Facebook