WCF-サービスバインディング

WCFサービスバインディングはいくつかの要素のセットであり、各要素はサービスがクライアントと通信する方法を定義します。トランスポート要素とメッセージエンコーディング要素は、各バインディングの2つの最も重要なコンポーネントです。この章では、一般的に使用されるさまざまなWCFサービスバインディングについて説明します。

基本的なバインディング

基本的なバインディングは、BasicHttpBindingクラスによって提供されます。HTTPプロトコルを使用してWCFサービスをASP.NETWebサービス(ASMX Webサービス)として転送および表現するため、ASMXWebサービスを使用する古いクライアントは新しいサービスを便利に利用できます。

基本バインディングは、Silverlightによって有効化されたWCF Webサービスのデフォルトのバインディングとして設定されており、Webサービススタイルの通信の標準バインディングです。信頼できるメッセージングは​​サポートしていません。

以下に示すのは、基本的なバインディングのデフォルト設定を示すコードスニペットです。

<basicHttpBinding>
   <binding name = "basicHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxBufferSize = "65536" 
      maxReceivedMessageSize = "65536" messageEncoding = "Text" proxyAddress = "" 
      textEncoding = "utf-8" transferMode = "Buffer" useDefaultWebProxy = "true" 
      closeTimeout = "00:01:00" openTimeout = "00:01:00" receiveTimeout = "00:10:00" 
      sendTimeout = "00:01:00">
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32"
         maxNameTableCharCount = "16384" maxStringContentLength = "8192"/>

      <security mode = "None">
         <transport clientCredentialType = "None" proxyCredentialType = "None" realm = ""/>
         <message algorithmSuite = "Basic256" clientCredentialType = "UserName" />
      </security>       
   </binding>

</basicHttpBinding>

上記のデフォルト設定には、メッセージサイズが制限されており、セキュリティモードがないため、明らかな制限があります。ただし、基本的なバインディングをカスタマイズすると、次のようなこの問題が解決されます。

<basicHttpBinding>
   <binding name = "basicHttpSecure" maxBufferSize = "100000" maxReceivedMessageSize = "100000">
   
      <readerQuotas maxArrayLength = "100000" maxStringContentLength = "100000"/>
      <security mode = "TransportWithMessageCredential" />
     
   </binding>
</basicHttpBinding>

Webサービスバインディング

Webサービス(WS)バインディングは、WSHttpBindingクラスによって提供されます。これは基本的なバインディングと非常によく似ており、トランスポートに同じプロトコルを使用しますが、WS-Reliable Messaging、WS-Transactions、WS-SecurityなどのいくつかのWS- *仕様を提供します。一言で言えば、WSHttpBindingはbasicHttpBindingとWS– *仕様の合計に等しくなります。以下に示すのは、WSバインディングのデフォルト設定を示すコードスニペットです。

<wsHttpBinding>
   <binding name = "wsHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxReceivedMessageSize = "65536" 
      messageEncoding = "Text" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" proxyAddress = "" sendTimeout = "00:01:00" 
      textEncoding = "utf-8" transactionFlow = "false" 
      useDefaultWebProxy = "true" > 
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = ."4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>

      <reliableSession enabled = "false" ordered = "true" 
         inactivityTimeout = "oo:10:00" /> 

      <security mode = "Message">
         <message algorithmSuite = "Basic256" clientCredentialType = "Windows" 
            esatalishSecurityContext = "true" 
            negotiateServiceCredential = "true" />

         <transport clientCredentialType = "Windows"
            proxyCredentialType = "None" realm = ""/>        	
      </security>
      
   </binding>
</wsHttpBinding>

IPCバインディング

IPCバインディングは名前付きパイプを利用し、netNamedPipeBindingクラスによって提供されます。これは、利用可能なすべてのバインディングの中で最も高速で安全なバインディングです。ここではメッセージレベルのセキュリティはサポートされていませんが、堅牢なトランスポートセキュリティにより、メッセージはデフォルトで安全です。以下に示すのは、IPCバインディングのデフォルト設定を示すコードスニペットです。

<netNamedPipeBinding>
   
   <binding name = "netPipeDefaults" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" 
      maxBufferSize = "65536" maxConnections = "10" 
      maxReceivedMessageSize = "65536" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" sendTimeout = "00:01:00" transactionFlow = "false" 
      transactionProtocol = "OleTransactions" transferMode = "Buffered">  

      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>
   
      <security mode = "Transport">        	
      </security>
      
   </binding>
</netNamedPipeBinding>

他のタイプのサービスバインディング

  • TCP Binding− NetTCPBindingクラスによって提供されるこのバインディングは、同じネットワーク内の通信にTCPプロトコルを利用し、バイナリ形式でメッセージのエンコードを行います。このバインディングは、他のバインディングとは対照的に最も信頼できると見なされています。

  • WS Dual Binding−このタイプのバインディングは、双方向通信を容易にするという唯一の例外を除いて、WSHttpBindingに似ています。つまり、メッセージはクライアントとサービスの両方で送受信できます。これは、WSDualHttpBindingクラスによって提供されます。

  • Web binding − Webバインディングは、HTTP-GET、HTTP-POSTなどを使用してHTTP要求の形式でWCFサービスを表すように設計されています。これはWebHttpBindingクラスによって提供され、ソーシャルネットワークで一般的に使用されます。

  • MSMQ Binding− NetMsmqBindingクラスによって提供され、サービスがクライアントから送信された時間とは異なる時間にメッセージを処理する場合のソリューションを提供するために使用されます。MSMQバインディングは、転送にMSMQを利用し、キューに入れられた切り離されたメッセージをサポートします。MSMQは、Microsoftが提供するメッセージキューの実装です。

  • Federated WS Binding−これはWSバインディングの特定の形式であり、フェデレーションセキュリティのサポートを提供します。これは、WSFederationHttpBindingクラスによって提供されます。

  • Peer Network Binding− NetPeerTCPBindingクラスによって提供され、主にファイル共有システムで使用されます。TCPプロトコルを使用しますが、トランスポートとしてピアネットワークを利用します。このネットワークでは、各マシン(ノード)が他のノードのクライアントおよびサーバーとして機能します。ピアネットワークバインディングは、トレントなどのファイル共有システムで使用されます。

  • MSMQ Integration Binding − MsmqIntegrationBindingクラスによって提供され、MSMQ(Microsoft Message Queuing)を介して通信する既存のシステムとの通信を支援します。

これらとは別に、カスタムバインディングを作成することもできます。ただし、各WCFバインディングの構成プロパティを微調整できるため、カスタムバインディングを作成する必要が生じることはめったにありません。