2

私は現在 WCF サービスに取り組んでおり、小さな問題があります。このサービスは、Polling Duplex サービスです。サーバーに送信されたメッセージを介してデータ転送を開始します。次に、サーバーは、コールバック チャネルを介してクライアントに大量のデータ パケットをかなり迅速に送り返します。

停止するには、停止するようにサーバーにメッセージを送信します。次に、これを確認するメッセージをコールバック チャネル経由で送信して、クライアントに知らせます。

問題は、大量のデータ パケットがバッファリングされ、コールバック チャネルを介してクライアントに送信されることです。これにより、最初にすべてのデータが通過するのを待たなければならないため、確認応答が返されるまでの待ち時間が長くなります。

サーバー側でコールバック チャネルのバッファをクリアする方法はありますか? データが失われることを心配する必要はありません。データを破棄して、すぐに確認メッセージを送信するだけで済みます。

4

1 に答える 1

1

これが正しい方向に導くことができるかどうかはわかりません... Subscribe() メソッドを見ると、これにアクセスできる同様のサービスがあります。

var context = OperationContext.Current;
var sessionId = context.SessionId;
var currentClient = context.GetCallbackChannel<IClient>();
context.OutgoingMessageHeaders.Clear();
context.OutgoingMessageProperties.Clear();

IClient オブジェクトを使用する方法があり、IClient のインスタンスを取得したコンテキストにアクセスする (そのコンテキストを解決する) 場合、次の 2 つのステートメントを実行すると、目的が達成できるでしょうか?

context.OutgoingMessageHeaders.Clear();
context.OutgoingMessageProperties.Clear();

私の考えからの簡単なとりとめ。個人情報については、これで問題が解決するかどうかを知りたいです。OperationContext を、2 つのプロパティを含む SubscriptionObject の一部としてキャッシュできますか。1 つ目は OperationContext 用で、2 つ目は IClient オブジェクトです。

于 2012-05-07T18:40:13.753 に答える