エクスポート (0) 印刷
すべて展開

Service Bus のバインド

更新日: 2014年6月

SDK には、WCF サービス/クライアントと Microsoft Azure の Service Bus で提供されるリレー サービスとの統合を自動化する WCF バインドのセットが用意されています。ほとんどの場合、現在使用中の WCF バインドを、Service Bus "リレー" バインドの 1 つに置き換えるだけで済みます。

次の表は、Service Bus WCF のすべてのバインドと、対応する標準の WCF バインドの一覧です。System.ServiceModel.BasicHttpBindingWebHttpBindingSystem.ServiceModel.WS2007HttpBindingSystem.ServiceModel.NetTcpBinding など、最もよく使用される WCF バインドには、すべて類似した名前 (「Binding」の前に「Relay」が挿入された名前) が付けられた、対応する Service Bus バインドがあります。Microsoft.ServiceBus.NetOnewayRelayBindingMicrosoft.ServiceBus.NetEventRelayBinding など、対応する WCF バインドがないリレー バインドもいくつかあります。

 

標準の WCF バインド 同等のリレー バインド

System.ServiceModel.BasicHttpBinding

Microsoft.ServiceBus.BasicHttpRelayBinding

System.ServiceModel.WebHttpBinding

Microsoft.ServiceBus.WebHttpRelayBinding

System.ServiceModel.WS2007HttpBinding

Microsoft.ServiceBus.WS2007HttpRelayBinding

System.ServiceModel.NetTcpBinding

Microsoft.ServiceBus.NetTcpRelayBinding

N/A

Microsoft.ServiceBus.NetOnewayRelayBinding

N/A

Microsoft.ServiceBus.NetEventRelayBinding

リレー バインドは標準の WCF バインドと同じように機能します。たとえば、WCF の異なるメッセージ バージョン (SOAP 1.1、SOAP 1.2、および None)、WS-* のさまざまなセキュリティ シナリオ、信頼できるメッセージング、ストリーミング、メタデータ交換、Web プログラミング モデル (例: [WebGet]、[WebInvoke]) など、WCF の標準機能の多くをサポートします。サポートされない WCF の機能は、アトミック トランザクション フロー、トランスポート レベル認証などほんの少数です。

WCF の作業に精通しているユーザーにとって、新しいバインド (このトピックで説明済み) と基礎となる WCF トランスポート バインド要素との対応は役に立つ情報です。次の表は、各リレー バインド用のトランスポート バインド要素を示しています。このとおり、SDK には、Microsoft.ServiceBus.HttpRelayTransportBindingElementMicrosoft.ServiceBus.HttpsRelayTransportBindingElementMicrosoft.ServiceBus.TcpRelayTransportBindingElementMicrosoft.ServiceBus.RelayedOnewayTransportBindingElement などの新しい WCF トランスポート バインド要素がいくつか含まれています。

 

リレー バインド トランスポート バインド要素

Microsoft.ServiceBus.BasicHttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.WebHttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.WS2007HttpRelayBinding

Microsoft.ServiceBus.HttpRelayTransportBindingElement

Microsoft.ServiceBus.HttpsRelayTransportBindingElement

Microsoft.ServiceBus.NetTcpRelayBinding

Microsoft.ServiceBus.TcpRelayTransportBindingElement

Microsoft.ServiceBus.NetOnewayRelayBinding

Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

Microsoft.ServiceBus.NetEventRelayBinding

Microsoft.ServiceBus.RelayedOnewayTransportBindingElement

これらの新しい WCF プリミティブが、最終的にバックグラウンドでリレー サービスとの低レベルのチャネル統合を提供しますが、その詳細はバインドの背後にあって表示されません。以下では、WCF の主要なリレー バインドの詳細と、その使用方法について説明します。

NetMessagingBinding バインドを WCF が有効なアプリケーションで使用すると、キュー、トピック、サブスクリプションを介してメッセージを送受信できます。詳細については、「NetMessagingBinding」を参照してください。

NetOnewayRelayBinding は一方向のメッセージのみをサポートしているため、すべてのリレー バインドのうち最も制約の高いものです。ただし、このリレー バインドはそのシナリオに特化して最適化されています。既定では、NetOnewayRelayBinding バインドはメッセージのバイナリ エンコードと共に SOAP 1.2 over TCP を使用しますが、これらの通信設定は標準のバインド構成手法を通じて構成可能です。このバインドを使用するサービスは、常に "sb" プロトコル スキームを使用する必要があります。

既定の構成でこのバインドを使用する場合、社内の WCF サービスは、双方向ソケットを作成するために、リレー サービスを使用して送信接続の確立を試みます。この場合、サービスは送信ポート 9351 を通じてセキュリティ保護された TCP/SSL 接続を常に作成します。接続プロセス中、WCF サービスは アクセス制御 から取得したトークンを提供して認証し、リレー サービスでリッスンする名前を指定し、作成するリスナーの種類をリレー サービスに指定します。WCF クライアントが既定の構成でこのバインドを使用する場合、バインド構成に応じてポート 9350 (TCP) または 9351 (TCP/SSL) 経由でリレーとの TCP 接続を作成します。クライアントは、接続プロセス中に、アクセス制御 から取得したトークンを提供してリレーへの認証を行う必要があります。正常に接続されたクライアントは、一方向メッセージの Service Bus への送信を開始し、TCP 接続を通じて社内サービスに「リレー」されることができます。

NetOnewayRelayBinding バインド セキュリティ モード プロパティを Transport に設定する場合、チャネルは SSL 保護を必要とします。この場合、リレー サービスとの間で送受信されるすべてのトラフィックは SSL を通じて保護されます。ただし、メッセージは暗号化されずにリレー サービスをパススルーすることを認識しておくことが重要です。完全なプライバシーを確保する場合は、Message セキュリティ モードを使用する必要があります。この場合、リレー サービスをパススルーするメッセージで宛先情報を除くすべてを暗号化できます。

NetOnewayRelayBinding バインドでは、サービス コントラクト上のすべての操作が一方向の操作 (IsOneWay=true) としてマークされる必要があります。この場合、この WCF バインドを使用するには、これをエンドポイント定義で指定し、必要な資格情報を提供します。

NetOnewayRelayBinding を使用する場合、社内の WCF サービスは既定で TCP 経由でリレー サービスに接続します。HTTP(S) の範囲を超えて送信 TCP 接続を有効にしないネットワーク環境内での運用では、これらの制約に対処する、より積極的な接続モードを使用するようにさまざまなリレー バインドを構成できます。これを可能にするには、TCP 接続の代わりにリレー サービスを使用して HTTP 接続を確立するように社内の WCF サービスを構成します。Service Bus は、次の 3 つのいずれかの値を使って構成できるシステムワイドな ConnectivityMode 設定を提供します。値は TcpHttp、および AutoDetect です (次の表を参照)。サービスが確実に HTTP 経由で接続するようにするには、このプロパティを Http に設定します。

 

ConnectivityMode 説明

Tcp

サービスはポート 9351 (SSL) 経由でリレー サービスを使用して TCP 接続を作成します。

Http

サービスはリレー サービスを使用して HTTP 接続を作成し、TCP ポートの制約により簡単に対処できるようにします。

AutoDetect (既定)

このモードは、現在のネットワーク環境で Tcp モードおよび Http モードのどちらかが使用可能かどうかを調べる自動検出メカニズムに基づいて、これらの接続オプションを自動的に選択します。Tcp が優先されます。

AutoDetect が既定のモードです。この場合、リレー バインドは社内サービスからリレー サービスへの接続に TCP を使用するか HTTP を使用するかを自動的に決定します。指定したネットワーク構成で TCP を使用できる場合、既定でこのモードが使用されます (接続を検出する URL に ping メッセージを送信して TCP の使用を試みます)。TCP 接続が失敗した場合は、自動的に HTTP モードに切り替えられます。したがって、既定の "自動検出" 動作によって動作が自動的に決定されるため、ほとんどの場合はこのプロパティを明示的に設定する必要はありません。このプロパティを明示的に設定する必要があるのは、TCP または HTTP のいずれかを強制するときのみです。

AppDomain レベルでの接続モードは、静的な ServiceBusEnvironment クラスを通じて設定します。このクラスは SystemConnectivity プロパティを提供します。このプロパティには、前に示した 3 つの ConnectivityMode 値のいずれかを指定できます。次のコードは、HTTP 接続モードを使用するようにアプリケーションを変更する方法を示しています。

...
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;
ServiceHost host = new ServiceHost(typeof(OnewayService), address);
host.Open();
...

システム接続モード設定は、すべてのリレー バインドに対して有効になります。

NetEventRelayBinding は、その実装方法が NetOnewayRelayBinding バインドと似ています。このバインドの既定値とセキュリティ オプションは、NetOnewayRelayBinding のものと同じです。さらに、クライアント/サービスとリレー サービスの相互作用のメカニズムは、基本的に同じです。実際、NetEventRelayBinding クラスは NetOnewayRelayBinding クラスから派生しています。

NetEventRelayBinding バインドでの主な違いは、複数の WCF サービスを同じ Service Bus アドレスに登録できることです。クライアントがこのようなアドレスにメッセージを送信するときに、リレー サービスは現在そのアドレスをサブスクライブしているすべての社内 WCF サービスにメッセージをマルチキャストします。

NetEventRelayBinding バインドは NetEventRelayBinding と同じ SystemConnectivity オプションをサポートしています。ServiceBusEnvironment クラスで SystemConnectivity プロパティを構成すると、すべてのエンドポイントに対して有効になります。したがって、送信 TCP 接続をブロックするロックダウンされたネットワーク環境にホストされた場合、社内のすべての NetEventRelayBinding エンドポイントに対して積極的な HTTP 接続モードを使用できます。

NetTcpRelayBinding バインドは双方向のメッセージ方式をサポートしており、標準の WCF NetTcpBinding と緊密に連携します。主な違いは、NetTcpRelayBinding がリレー サービスで一般に到達可能な TCP エンドポイントを作成することです。

既定では、NetTcpRelayBinding バインドは SOAP 1.2 over TCP をサポートし、効率のためにバイナリのシリアル化を使用します。その構成は NetTcpBinding と似ていますが、基礎になる TCP ソケット レイヤーは異なるため、直接の互換性はありません。つまり、統合するためには、NetTcpRelayBinding を使用するようにクライアント アプリケーションを構成する必要もあります。

最初に、社内の WCF サービスはセキュリティ保護された送信 TCP 接続をリレー サービスと確立します。このプロセス中に、サービスは認証を行い、リッスンするアドレスを指定し、リレーで作成するリスナーの種類を指定する必要があります。この時点までは、NetOnewayRelayBinding バインドと似ています。いずれかのフロント ノードに受信メッセージが到着すると、社内の WCF サービスに制御メッセージがルーティングされ、クライアントのフロントエンド ノードとランデブー接続を作成する方法が示されます。これにより、TCP メッセージを中継するための直接のソケット ツー ソケット フォワーダーが確立されます。

NetTcpRelayBinding バインドは、リレー サービス (次の表を参照) を通じてクライアントとサービスが相互に通信する方法を制御する 2 つの接続モード (TcpRelayConnectionMode を参照) をサポートしています。

 

TcpConnectionMode 説明

Relayed (既定)

すべての通信はリレー サービスを通じて中継されます。すべての通信が転送されるエンド ツー エンド ソケット中継接続をネゴシエートするために、SSL で保護された制御接続が使用されます。いったん接続が確立されると、リレー サービスは双方向のバイト ストリームを中継するソケット フォワーダー プロキシとして機能します。

Hybrid

初期の通信はリレー サービス インフラストラクチャを通じて中継され、クライアント/サービスは相互に直接ソケット接続をネゴシエートします。この直接接続の調整はリレー サービスによって管理されます。直接ソケット接続アルゴリズムは、対立するファイアウォールと NAT デバイスの背後に存在する 2 つのパーティ間で直接接続を確立できます。アルゴリズムはファイアウォール トラバーサルには送信接続のみを使用し、NAT トラバーサルには相互ポート予測アルゴリズムに依存します。直接接続を確立できるようになると、中継接続はメッセージを表示したりデータを損失することなく、自動的に直接接続にアップグレードされます。直接接続を確立できない場合、データは通常どおりリレー サービスを通じて流れ続けます。

Relayed モードが既定です。Hybrid モードは、リレー サービスに対してクライアントとサービス アプリケーションの間で直接接続を確立するように指示します。したがって、リレーをパススルーする必要があるデータはありません。リレーを通じた情報の中継から開始する一方で直接接続へのアップグレードを試みるため、これは "ハイブリッド" モードであると見なされます。成功した場合、データ損失を発生させることなく直接接続に切り替わります。直接接続を確立できない場合は、リレー サービスの使用が継続されます。HTTP 経由でリレー サービスに接続するように社内サービスを構成する必要がある場合に備えて、NetTcpRelayBinding バインドは SystemConnectivity 機能もサポートしています。SystemConnectivity プロパティを構成すると、すべてのエンドポイントに対して有効になります。したがって、送信 TCP 接続をブロックするロックダウンされたネットワーク環境にホストされた場合、社内のすべての NetTcpRelayBinding エンドポイントに対して積極的な HTTP 接続モードを使用できます。

これまでに説明したすべてのバインドでは、操作のクライアント側でクライアントが WCF を使用することが必要です。WCF 以外のクライアントが Service Bus エンドポイントと統合する必要があるときは、さまざまな HTTP リレー バインドのいずれかを選択して、中継 HTTP ベースのメッセージをサポートできます。

Service Bus には、WebHttpRelayBindingBasicHttpRelayBindingWS2007HttpRelayBinding など、複数の HTTP バインドが用意されています。これらの HTTP バインドは、各バインドでサポートされる標準プロトコルを認識する任意のクライアントをサポートできるため、より広範なリーチとより高い相互運用性を提供します。WebHttpRelayBindingBasicHttpRelayBinding は、それぞれ HTTP/REST および基本的な SOAP に基づいているため、最も広範なリーチを提供します。WS2007HttpRelayBinding バインドは、WS-* プロトコルを通じて追加の機能の層を提供できます。WS2007HttpRelayBinding バインドを使用する場合、クライアントはエンドポイントで WS-* プロトコルの同じスイートを有効にしてサポートする必要があります。

使用する HTTP リレー バインドにかかわらず、リレー サービスで発生する処理のメカニズムの大部分は同じです。社内の WCF サービスは、使用中の ConnectivityMode 設定に応じて、リレー サービスとの TCP 接続または HTTP 接続を最初に確立します。ConnectivityMode の機能はすべての HTTP リレー バインドで同じように動作します。次に、クライアントはリレー サービスによって公開された HTTP エンドポイントにメッセージの送信を開始します。これにより、どの HTTP/SOAP 互換ライブラリでも必要な WCF がクライアントで不要になります。いずれかのフロント ノードに受信メッセージが到着すると、サービスに対して制御メッセージがルーティングされ、クライアントのフロントエンド ノードとのランデブー接続を作成する方法が示されます。これにより、HTTP メッセージを中継するための直接の HTTP ツー ソケット フォワーダーが確立されます。

リレー サービスは、SOAP 1.1、SOAP 1.2、およびプレーンな HTTP (REST) メッセージを透過的にルーティングする方法がわかります。その他の WCF バインドの場合と同じように、いずれかの HTTP リレー バインドを構成して、使用するメッセージ スタイルとさまざまな WS-* プロトコルを制御します。

表示:
© 2014 Microsoft