2009-04-13 5 views
1

私はいくつかのアプリケーション "マスタ"がいくつかのタスクを実行するために "スレーブ"と呼ばれる同種のプロセスにコマンドを送信し、プロセスの失敗。彼らはまた、要求に応じて利用可能なマスターにいくつかのデータを公開する必要があります。WCFをマスタ/スレーブコマンドモデルとして使用

このモデルはWCFではどのように見えますか?

マスターとスレーブホストのそれぞれのインスタンスが独自のサービスを提供しますか?マスターホストだけでしょうか?奴隷だけ?コールバック契約を使用する必要がありますか?データ契約またはサービス契約のみ。

これは、製品テストに使用される低帯域幅、低強度、内部専用の配布プロジェクトであり、「大規模な需要の高い」プロジェクトとはみなされません。

答えて

2

あなたは間違いなくサービス契約を結ぶ必要があります。これはあなたのサービスとそれに対する操作(メソッド)を定義するだけです(OperationContract)。

"ファイアウォールの背後にある"システムの場合、デュプレックスバインディングを見ることができます。マスターはスレーブに電話をかけ、スレーブはデュプレックスが完了したらそれを報告します。デフォルトでは、WsDualHttpBindingだけがデュプレックスをサポートしていますが、ファイアウォールの内側にあるので、独自のTCPベースのデュプレックスバインディングを作成することができます(これは難しいことではありません最初!)。

このシナリオでは、両方の関連するアプリは、実際にはサーバーとクライアントです。

マスターとスレーブの間を移動するDATAを定義するために、何らかの形、形状、または形式のDataContractsがあります。つまり、データコントラクトが必要です。

EDIT: もちろん、2つのMSMQメッセージキューを使用することもできます。マスタは自分の「仕事」要求を待ち行列にドロップし、スレーブはこれを待ち受けてジョブ要求を取得します。スレーブが完了すると、スレーブはリスナーである応答キューに応答をドロップし、そのようにしてジョブが通知されます。

マルク・

0

スレーブ処理に時間がかかる場合は、コールバック契約が順番に行われる可能性があります。それ以外の場合は、スレーブが完了するのを待っているマスターをブロックするだけで済みます(タイムアウトしないようにWCFクライアントの設定を調整する必要があります)。

あなたの記述に基づいて、私はあなたが本当にスレーブノードでWCFサービスをホストする必要があると思います。マスターはスレーブによって公開されたWCFサービスを消費するクライアントかもしれません。

+0

は、複数のプロセスが同じURI上のサービスをホストすることができ、どのように限り、エンドポイントではなく、App.configファイルの、プログラムによるエンドポイントに行くように、その仕事?私はそれの音から確かにコールバック契約が必要になります。 – Firoso

1

私はあなたがコールバック契約の複雑さを必要としない記述している何..ここでジェレミーに同意します。ワーカーノードは単にWCFサービス(またはWSDLまたはREST Webサービスさえも)を公開することができ、コントローラーは各子ノードのURLを知り、メッセージをワーカーノードに送信するだけで済みます。

コントローラが単一のメッセージをブロードキャストしてすべてのワーカーを持つことができるようにしたい場合(私は以前、コントローラ/ワーカーと呼んでいた) WCFで利用可能な過小評価されたP2Pチャンネルを使用したい場合があります。これにより、WCFで書かれたサービスのグループは、トピック/会話セパレータとほとんど同じようにURLが使用されている同輩として、一度にお互いに話すことができます。

たとえば、net.p2p:// labs/commandsチャネルでコマンドを発行できます。コントローラーのみがそのチャネルでコマンドを送信しますが、すべてのワーカー・ノードはlistenします。彼らが非同期的に処理を終えたら、net.p2p:// labs/statusチャンネルに進捗状況を報告することができます。このアプローチの利点は、(この機能が必要な場合)、個々のワーカーは他のすべてのワーカーが何をしているのかを知ることができるということです。

しかし、P2Pを使用する場合、競合に対処する必要があります.2つのノードで同じコマンドを受け入れることになります。これが問題ない場合は、P2Pがあなたのツールです。コマンドが発行され、個々のノードが空き状態になったときに、個々のノードが順次取得する必要がある場合は、リモートノードに個別のテストスクリプトを実行するように指示する場合、P2Pの代わりにMSMQバインディングを使用できます。その後、すべてのワーカーがキューからメッセージを受け取るクライアントになり、同じ要求を受け入れる複数のワーカーの状況に容易に対処できます。

追加参照: A blog post I wrote a while back on the Peer Channel

Peer Channel Scenarios on MSDN - これは、ここからピアチャンネルのコンセプトからリファレンスガイドに進むことができるため、良いことです。

Peer Channel Team Blog

+0

あなたはP2Pプロトコルに関する詳細情報を見直して、リンクを投稿したり、記事を選択したりすることができますか?私はあなたの応答に感謝します。 – Firoso

+0

P2Pとピアチャネルの参照へのリンクを含むように私の元の応答を変更しました。 –

+0

大変感謝しています! – Firoso