Wcf-service-binding

提供:Dev Guides
移動先:案内検索

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

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

基本的なバインド

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

基本バインディングは、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バインディング*-NetTCPBindingクラスによって提供されるこのバインディングは、同じネットワーク内での通信にTCPプロトコルを使用し、バイナリ形式でメッセージをエンコードします。 このバインディングは、他のバインディングとは対照的に最も信頼できるものと見なされます。
  • WS Dual Binding -このタイプのバインディングは、双方向通信を促進する唯一の例外を除いて、WSHttpBindingに似ています。つまり、クライアントとサービスの両方でメッセージを送受信できます。 WSDualHttpBindingクラスによって提供されます。
  • * Webバインディング*-Webバインディングは、HTTP-GET、HTTP-POSTなどを使用して、HTTP要求の形式でWCFサービスを表すように設計されています。 WebHttpBindingクラスによって提供され、ソーシャルネットワークで一般的に使用されます。
  • MSMQ Binding -NetMsmqBindingクラスによって提供され、クライアントが送信した時間とは異なる時間にサービスがメッセージを処理する場合にソリューションを提供するために使用されます。 MSMQバインディングは、転送にMSMQを使用し、キューに入れられた分離メッセージをサポートします。 MSMQは、Microsoftが提供するメッセージキューの実装です。
  • フェデレーションWSバインディング-WSバインディングの特定の形式であり、フェデレーションセキュリティのサポートを提供します。 WSFederationHttpBindingクラスによって提供されます。
  • Peer Network Binding -NetPeerTCPBindingクラスによって提供され、主にファイル共有システムで使用されます。 TCPプロトコルを使用しますが、トランスポートとしてピアネットワーキングを使用します。 このネットワークでは、各マシン(ノード)は他のノードに対するクライアントおよびサーバーとして機能します。 ピアネットワークバインディングは、torrentのようなファイル共有システムで使用されます。
  • * MSMQ統合バインディング*-MsmqIntegrationBindingクラスによって提供され、MSMQ(Microsoft Message Queuing)を介して通信する既存のシステムとの通信に役立ちます。

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