2011-12-20 6 views
3

私はnetTcpBindingを使用していますが、私が読んだことから、percallインスタンス・コンテキストはwcfを使用するための推奨方法です。しかし、これは私が非同期のデュプレックスコールバックを使用できないことを意味しますか?メソッド呼び出しの間にサービスオブジェクトが破棄されるため、クライアント上で非同期コールバックを実行する方法はありません。これは正しいです?パーコールインスタンシングを使用したWCF非同期デュプレックスコールバックは可能ですか?

スケーラビリティのためにpercallを使用したい場合、コールバックが非同期であるため、クライアントマシンでの応答性に問題があると思われます。それとも私はそれがすべて間違っている?

答えて

1

非同期デュプレックスコールバックとはどういう意味ですか?

通常のデュプレックス契約を使用し、非同期の方法でこれを呼び出して、クライアントがブロックしないようにすることができます。明らかに、サービスオブジェクトは呼び出し元にコールバックされるまで生き続ける必要があります。

5

クライアントインスタンスとサーバーインスタンスが混在しています。 InstanceContextMode.PerCallは、クライアントからのすべての呼び出しがその単一の要求を処理する新しいオブジェクトを取得することを意味します。

あなたが話しているコールバックチャネルは、反対方向に通信しています。クライアントのメソッドを呼び出します。あなたのクライアントは生き続けるべきであり、サーバーの観点からは単一のインスタンスです。

したがって、メソッド呼び出しがクライアント操作コンテキストの後にサーバー側で永続化する必要があります。それはリファレンスであるため、コールバック契約を使用してクライアントにメッセージを送信する必要があります。

したがって、InstanceContextMode.PerCallで非同期コールバックを使用できますが、セッション状態のストレージを自分で提供する必要があります。

+0

この新しいオブジェクトがサーバー側にあることを確認していますか? –

+0

@スティーブン:あなたが聞いたことは分かりません。 PerCallは、各呼び出しに対して、サーバー上でその呼び出しを処理するためにwcfランタイムによって新しいサーバーオブジェクトがインスタンス化されることを意味します。 – Jan

+0

あなたはちょうど私の質問に答えました。 Thx Jan –

関連する問題