2009-06-09 15 views
0

Silverlightでは、次の問題が発生しました。 Webサービスに対して複数の要求を発行すると、応答は順序付きの順序で返されない可能性があります。最初の要求が長く、次のもの以上かかる場合は、その応答が最後に戻ります意味:Silverlightで古くなったWCF応答をドロップする

1. Sending request A.. (takes longer for some reason) 
2. Sending request B.. 
3. Sending request C.. 
4. ... 
5. Receiving response B 
6. Receiving response C 
7. Receiving response A 

今私のシナリオでは、私がが行われ、最も最近のリクエストでのみ興味があります。だから、AとBは捨てられ、Cは受け入れられた応答としてのみ保持されるべきです。

これを管理する最適な方法は何ですか?これまでのところこの解決策を考え出しました。

要求を送信するときに生成されたGUIDをユーザーオブジェクトとして渡し、その値をどこかに格納します。すべての応答にそれぞれのGUIDが含まれるため、古い応答を除外できます。 GUIDの代わりに要求カウンターも同様に機能します。

ここでは、これにもっと良いアプローチがあるのだろうかと思います。おそらく、これを可能にするための機能はありませんか?任意のアイデアを歓迎しています..

答えて

2

私はWCF以外のASP.NET Webサービスで同様のアプローチを取っていますが、代わりにDateTimeのリクエストを使用して、最新のリクエストのDateTimeを保存します。このようにして、直接的な比較を行うことで、戻り値のサービスが最新のものかどうかを判断できます。

新しいサービスコールを作成する前に古いサービスコールをキャンセルする方法を検討しましたが、SilverlightでCancelAsync Webサービスを呼び出す必要はありません。これと同等の方法を見つけることができませんでした。

0

これら両方のアプローチは、多くのサービスコールを使用してリアルタイムシステムを操作したときに取ったものです。基本的には、順序を追跡する(変数、タイムスタンプなどを増やす)方法を持ち、受信した最も高い応答を追跡します。現在の応答が最高値よりも低い場合は、それをドロップします。

関連する問題