0

Windowsサービスとして実行されている別の.netアプリケーションによって公開されるwcfサービスを使用する.netwinformアプリケーションをまとめました。

通信は同じマシン内で行われるため、同じマシンでのプロセス間通信に最適なNetNamedPipeを通信チャネルとして選択しました。

.net Windowsサービスでwcfサービスを定義するときに、正しいプロパティの選択肢を使用しているかどうかを知りたいです。

WCFサービスの動作は次のように定義されます。

[ServiceBehavior( 
    ConcurrencyMode = ConcurrencyMode.Single,
    InstanceContextMode = InstanceContextMode.Single)]

UIクライアントによってwcfサービスメソッドが呼び出されるたびにwcfサービス内のオブジェクトが再作成されないことがわかるように、「InstanceContextMode」をシングルとして選択しました。

ただし、MSDNで選択するConcurrencyModeプロパティを読んでいるときに、少し混乱しました。基本的なレベルでは、ConcurrencyModeプロパティが、wcfサービスが単一、複数、または再入可能な呼び出しをサポートするかどうかを決定することを理解しています。

つまり、UIクライアントアプリケーションがマルチスレッドであり、それらのスレッドからwcfサービスメソッドを呼び出す場合は、「同時実行」モードを「複数」として選択し、UIクライアントがマルチスレッドでない場合は、「同時実行」を選択する必要があります。 「シングル」としてのモード?UIクライアントアプリケーションが複数のスレッドを実行していません。すべての操作は、イベントハンドラーを介してメインUIスレッドで実行されます(ボタンのクリック、コンボボックスの選択など)。

Windowsテストマシンにアプリケーションをインストールした後、UIクライアントがwcfサービスに接続できない場合があります。wcfクライアントオブジェクトのConnectメソッドの呼び出しを待機し続け、最終的にタイムアウトします。それが私が行った「ConcurrencyMode」の選択に関連しているかどうかを知りたいです。それとも、これは「NetNamedPipe」通信チャネルの問題ですか?

ご意見をお聞かせください。

前もって感謝します。

サブブ

4

1 に答える 1

0

ホストオブジェクトがスレッドセーフである場合、つまり共有リソースに手動でロックを実装している場合、またはホストオブジェクトに共有オブジェクトまたはクラスレベルのオブジェクトがまったくない場合にのみ、同時モードを複数として選択します。ホストオブジェクトがスレッドセーフではない場合、この場合のように単一の同時実行モードを使用すると、wcfが自動的にロックを実装し、コンテキストで一度に1つの要求のみが処理され、並列がキューに入れられます。したがって、ここでの決定は、ホストオブジェクトがスレッドセーフであるかどうかに実際に依存する必要があります。

于 2012-06-21T07:55:18.163 に答える