キューに置かれたアプリケーションの Web ホスト
Windows プロセス アクティブ化サービス (WAS) は、Windows Communication Foundation (WCF) サービスをホストするアプリケーションが含まれているワーカー プロセスのアクティブ化と有効期間を管理します。 WAS プロセス モデルは、HTTP への依存性を取り除くことで、HTTP サーバーの IIS 6.0 プロセス モデルを一般化します。 メッセージ ベースのアクティブ化をサポートしており特定のコンピューター上で多数のアプリケーションをホストできるホスティング環境で、HTTP および非 HTTP プロトコル (net.msmq、msmq.formatname など) の両方を WCF サービスで使用できるようになります。
WAS にはメッセージ キュー (MSMQ) アクティブ化サービスが含まれており、アプリケーションで使用されるキューのいずれかに 1 つ以上のメッセージが置かれると、キュー アプリケーションがアクティブ化されます。 MSMQ アクティブ化サービスは、既定で自動的に開始される NT サービスです。
WAS とそのベネフィットの詳細については、「Windows プロセス アクティブ化サービスでのホスティング」を参照してください。 MSMQ の詳細については、「キューの概要」を参照してください。
WAS でのキュー アドレス指定
WAS アプリケーションには URI (Uniform Resource Identifier) アドレスがあります。 アプリケーション アドレスは、ベース URI プレフィックスとアプリケーション固有の相対アドレス (パス) の 2 つの部分に分かれます。 この 2 つの部分を結合すると、アプリケーションの外部アドレスになります。 ベース URI プレフィックスは、サイト バインディングで構築され、サイト内のすべてのアプリケーションで使用されます。たとえば、"net.msmq://localhost"、"msmq.formatname://localhost"、"net.tcp://localhost" などです。 次に、アプリケーション固有のパス フラグメント ("/applicationOne" など) が取得され、ベース URI プレフィックスに追加されてアプリケーション アドレスが構築されます。これでアプリケーションの完全 URI になります。たとえば、"net.msmq://localhost/applicationOne" などです。
MSMQ アクティブ化サービスは、アプリケーション URI を使用して、MSMQ アクティブ化サービスでメッセージを監視する必要のあるキューを照会します。 MSMQ アクティブ化サービスを起動すると、受信するように設定したコンピューターのすべてのパブリック キューとプライベート キューが列挙され、そのキューのメッセージが監視されます。 MSMQ アクティブ化サービスは、10 分おきに監視対象のキュー リストを更新します。 キューでメッセージが検出されると、アクティブ化サービスは、キュー名を net.msmq バインディングで一致する最長のアプリケーション URI と一致させ、アプリケーションをアクティブ化します。
Note
アクティブ化するアプリケーションは、キュー名のプレフィックスに一致 (最長一致) する必要があります。
たとえば、msmqWebHost/orderProcessing/service.svc という名前のキューがあるとします。 アプリケーション 1 に仮想ディレクトリ /msmqWebHost/orderProcessing がありその下に service.svc が格納されており、アプリケーション 2 に仮想ディレクトリ /msmqWebHost がありその下に orderProcessing.svc が格納されている場合、アプリケーション 1 がアクティブ化されます。 アプリケーション 1 が削除されると、アプリケーション 2 がアクティブ化されます。
Note
キューが作成され、メッセージがそのキューに送信されても、MSMQ アクティブ化サービスがそのキュー リストを更新するまで、アプリケーションはアクティブ化されません。キュー リストが更新されるまでの時間は、キューが作成されてから最大で 10 分です。 アクティブ化サービスを再起動した場合も、キュー リストは更新されます。
アドレスに対するプライベート キューとパブリック キューの影響
MSMQ アクティブ化サービスでは、プライベート キューの監視とパブリック キューの監視が区別されません。 したがって、パブリック キューとプライベート キューを同じ名前にすることはできません。 同じ名前の場合、いずれかのキューを読み込んで、Web ホスト アプリケーションがアクティブ化される場合があります。
アクティブ化のためのキュー構成
MSMQ アクティブ化サービスは、NETWORK SERVICE として動作します。 これは、アプリケーションをアクティブ化するキューを監視するサービスです。 キューからアプリケーションをアクティブ化するようにするには、アクセス制御リスト (ACL) に NETWORK SERVICE アクセス用のキューを指定し、メッセージをピークする必要があります。
有害メッセージ処理
WCF での有害メッセージ処理は、チャネルによって行われます。ここでは、有害メッセージが検出されるだけでなく、ユーザーの構成に基づいて処置が選択されます。 そのため、キューには 1 つのメッセージが存在します。 Web ホスト アプリケーションが連続的に中断されると、このメッセージは再試行キューに移動されます。 再試行サイクル遅延により指定された時点で、メッセージは再試行キューからメイン キューに移動されて再試行されます。 ただし、この場合、キューに置かれたチャネルがアクティブである必要があります。 アプリケーションが WAS により再利用される場合、メッセージは、別のメッセージがメイン キューに到着してキューに置かれたアプリケーションがアクティブ化されるまで再試行キューに残ります。 この場合の回避策は、メッセージを再試行キューからメイン キューに手動で戻し、アプリケーションを再アクティブ化することです。
サブキューとシステム キューに関する注意
WAS によりホストされるアプリケーションを、システム キュー (システム全体の配信不能キューなど) 内や、サブキュー (有害サブキューなど) 内のメッセージに基づいてアクティブ化することはできません。 これはこのバージョンの製品の制限です。