2012-05-07 12 views
2

現在WCFサービスで作業しており、小さな問題があります。サービスはPolling Duplexサービスです。私はサーバーに送信されたメッセージを通じてデータ転送を開始します。その後、サーバーは、コールバック・チャネルを介して大量のデータ・パケットをクライアントにかなり迅速に送信します。WCFサービスのクリアバッファー

私はそれを止めることを伝えるメッセージをサーバーに送信します。次に、クライアントに知らせるために、これを確認するコールバックチャネルを介してメッセージを送信します。

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

サーバー側でコールバックチャネルのバッファをクリアできる方法はありますか。私はデータを失うことを心配する必要はありません、私はちょうどそれを離れてすぐに確認メッセージを送信する必要があります。

+0

私はまだこれについて良い解決策を考え出していません。私は本当にすべてのデータがどこにバッファリングされているのか分からない。サーバーはデータを送信してから停止するように指示しますが、サーバー側で発生することがわかりますが、クライアントはそれ以降数秒間データを取得し続けます。私が送信を遅くすると、私は問題はありません。しかし、ここでの問題は、接続速度が変わることです。接続に基づいて調整する必要があるように感じます。バッファが空のときに助けてくれることが分かっても、自分が送信したデータを保存することができます。 – thecaptain0220

答えて

1
私はこれが正しい方向にあなたを導くことができるかどうかわからない

か...私は私が私の購読()メソッドで見て同様のサービスを持って、私はこれにアクセスすることができます。

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(); 

私の考えからちょっと離れています。これが解決するかどうかを知りたい場合は、他に何もない場合は個人情報のために。 2つのプロパティを含むSubscriptionObjectの一部としてOperationContextをキャッシュできますか?最初はOperationContext、2つ目はIClientオブジェクトです。

+0

これは正しい方向になるようです。クライアントとOperationContextを保持していますが、OutgoingMessageHeadersをクリアすると、クリアする前にカウントが0になっています。私はもう少しそれを取り乱して、何かを見つけたら教えてください。 – thecaptain0220