SRMP サンプルでは、HTTP 経由でメッセージ キュー (MSMQ) を使用して、トランザクションキュー通信を実行する方法を示します。
キュー通信では、クライアントはキューを使用してサービスと通信します。 より正確には、クライアントはメッセージをキューに送信します。 サービスはキューからメッセージを受信します。 そのため、サービスとクライアントは、キューを使用して通信するために同時に実行する必要はありません。
MSMQ を使用すると、HTTP (HTTPS の使用を含む) を使用してキューにメッセージを送信できます。 この例では、Windows Communication Foundation (WCF) のキューに登録された通信の使用方法と、HTTP 経由でメッセージを送信する方法を示します。 MSMQ は SRMP と呼ばれるプロトコルを使用します。これは、HTTP 経由の通信に SOAP ベースのプロトコルです。
サンプルを設定、ビルド、実行するには
Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。
ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。
Windows コンポーネントの追加と削除でサンプルを実行する前に、MSMQ が HTTP サポートでインストールされていることを確認します。 HTTP サポートをインストールすると、インターネット インフォメーション サービス (IIS) が自動的にインストールされ、MSMQ 用の IIS にプロトコル サポートが追加されます。
通信に HTTP が使用されていることを確認する場合は、MSMQ を強化モードで実行できます。 これにより、コンピューター上でホストされているキューへのメッセージが、HTTP 以外のトランスポートを使用して受信できなくなります。
強化モードで実行するために MSMQ を選択した後、コンピューターは Windows Server 2003 で再ブートする必要があります。
サービスを実行します。
クライアントを実行します。 localhost ではなく、マシン名または IP アドレスを指すようにエンドポイント アドレスを変更してください。 クライアントはメッセージを送信して終了します。
要求事項
このサンプルを実行するには、MSMQ に加えて、サービスマシンとクライアント マシンの両方に IIS をインストールする必要があります。
対象
このサンプルでは、HTTP 経由で MSMQ を使用して WCF キューに登録されたメッセージを送信する方法を示します。 これは SRMP メッセージングとも呼ばれます。 キューに登録されたメッセージが送信されると、送信側のコンピューター上の MSMQ は、TCP または HTTP トランスポート経由で受信キュー マネージャーにメッセージを転送します。 SRMP を選択すると、ユーザーはキュー転送のトランスポートとして HTTP の選択を示します。 SRMP Secure を使用すると、HTTPS を使用できます。
例
サンプル コードは、トランザクションされたサンプルに基づいています。 SRMP を使用してキューにメッセージを送信し、キューからメッセージを受信する方法は、ネイティブ プロトコルを使用したメッセージの送受信と同じです。
クライアントの構成は、キュー転送プロトコルの選択を示すように変更されます。 キュー転送プロトコルには、ネイティブ、SRMP、SrmpSecure のいずれかを指定できます。 既定では、転送プロトコルはネイティブです。 クライアントとサービスは、この例で SRMP を使用するように構成で指定します。
SRMP には、トランスポート セキュリティに関する制限があります。 既定の MSMQ トランスポート セキュリティでは、送信キュー マネージャーと受信側キュー マネージャーが同じ Windows ドメインに存在する必要がある Active Directory が必要です。 HTTP 境界経由でメッセージを送信する場合は、この操作を実行できません。 そのため、既定のトランスポート セキュリティは機能しません。 トランスポート セキュリティが必要な場合は、トランスポート セキュリティを証明書に設定する必要があります。 メッセージ セキュリティは、メッセージをセキュリティで保護するためにも使用できます。 このサンプルでは、SRMP メッセージングを示すために、トランスポートとメッセージのセキュリティの両方がオフになっています。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<!-- Define NetMsmqEndpoint -->
<endpoint name="OrderProcessorEndpoint"
address=
"net.msmq://localhost/private/ServiceModelSamplesSrmp"
bindingConfiguration="srmpBinding"
binding="netMsmqBinding"
contract="IOrderProcessor" />
</client>
<bindings>
<netMsmqBinding>
<binding name="srmpBinding"
queueTransferProtocol="Srmp">
<security mode="None" />
</binding>
</netMsmqBinding>
</bindings>
</system.serviceModel>
</configuration>
サンプルを実行すると、次の出力が生成されます。
Processing Purchase Order: 556b70be-31ee-4a3b-8df4-ed5e538015a4
Customer: somecustomer.com
OrderDetails
Order LineItem: 54 of Blue Widget @unit price: $29.99
Order LineItem: 890 of Red Widget @unit price: $45.89
Total cost of this order: $42461.56
Order status: Pending