0

クライアントへのイベントの送信を含む「少数」のクライアントをサポートする必要がある WCF (netTcpBinding は現在計画中) クライアント/サーバー アプリケーションを作成しています。

クライアントがイベントを処理している間、サーバーをブロックしたくありません。

論理的には、コールバック メソッドを「OneWay」としてマークするか、「being_MethodName(..)」で呼び出すかの一致の違いはわかりません。

では、各手法の長所と短所は何ですか?


私の読書から、OneWay メッセージのエラー処理は複雑であり、予期せずチャネルが悪化する可能性があることがわかりました...たとえば、それらは発火せず、忘れてしまいます!

4

1 に答える 1

0

抽象コントラクト定義POVから、サーバーがクライアントからの応答を必要としない場合、クライアントとの「コントラクト」にそれを書き込む理由はありません。

より実用的なレベルでは、帯域幅のコストと、無関係なメッセージを送受信する必要がある処理のオーバーヘッドが発生します。

私が抱えるもう1つの大きな懸念は、サーバーがクライアントに通知を送信しているのと同じTCPチャネルでクライアントがサーバーにメッセージを送信しているかどうかです。その場合は、デッドロックの可能性を回避するために、OneWayメッセージを使用する必要があります(このスレッドの私のコメントを参照してください:コールバックを使用すると、WCF二重チャネルが閉じられます)。

また、明確にするために、一方向と非同期は排他的ではありません。非同期パターンを使用して一方向メッセージを送信できます。たとえば、ネットワークバッファがいっぱいの場合、一方向のメッセージ送信がブロックされる可能性があるため、非同期を使用すると、サーバーイベント通知スレッドのブロックが解除されたままになります。

于 2009-11-24T17:13:38.093 に答える