0

Silverlight では、次の問題が発生しました。Web サービスに対して複数の要求を発行すると、応答が順序どおりに返されない場合があります。つまり、最初のリクエストに次のリクエストよりも時間がかかる場合、そのレスポンスは最後に返されます。

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 の代わりに要求カウンターも機能します。

今、これに対するより良いアプローチがあるかどうか疑問に思っています。これを可能にするすぐに使える機能があるでしょうか?どんなアイデアでも大歓迎です..

4

2 に答える 2

2

非 WCF ASP.NET Web サービスでも同様のアプローチをとっていますが、代わりにリクエストの を使用し、最新のリクエストの をDateTime保存するだけです。DateTimeこのようにして、返されたサービスが最新かどうかを判断するために、直接比較を行うことができます。

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

于 2009-06-09T18:55:53.587 に答える
0

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

于 2009-06-09T22:10:21.137 に答える