0

REST Web サービスと通信すると、ステータス コード 304 の http 応答が返され、要求されたリソースが変更されていないことが示されます。ただし、HttpWebRequestクラスを使用する WP7 アプリケーションでは、電話がこのタイプの応答を正常に読み取るまでにちょうど 2 分かかります。

    HttpWebRequest request = HttpWebRequest.Create("path/to/unchanged/resource") as HttpWebRequest;
    request.Method = "GET";
    request.BeginGetResponse(
        new AsyncCallback(
            (aysncResult) => {
                // response is read correctly here... 120 seconds later
            }), null);

Web サービスが 304 ですぐに応答し、本文データがなく、要求自体がタイムアウトしておらず、アプリケーションが他の応答コード [404、201 など] を正常に処理できることがわかります。Silverlight ブラウザーの "キャッシュ" の問題でしょうか?

誰かがこれを以前に見たことがあることを確認できますか、またはこの問題について何か考えがありますか?

乾杯、アラスデア。

== 追加情報 ==

WP7 が特定のリクエスト ヘッダーを制限した結果、すべてのリソース リクエストにカスタムの [If-Modified-Since] ヘッダーを使用します。このカスタム ヘッダー [X-If-Modified-Since] は、Web サービスの前にあるファイアウォールによって認識され、変更されて標準ヘッダーに戻されます。これが上記の問題に関連しているかどうかはわかりません。

4

1 に答える 1

0

誰かが興味を持っているか、同様の問題に直面している場合に備えて、私自身の質問に答えました。

最終的に、Web サービスが OK (200) http ステータス コードで応答するように構成し、カスタム ヘッダー X-Http-Status に実際の応答コードを記述することで回避策を作成しました。クライアント側で応答を解析するときに、このカスタム ヘッダーが存在する場合は、これを実際のステータス コードと見なし、そこからビジネス ロジックを続行します。

これにより、Windows Phone が異なる方法で処理する追加のステータス コードを処理できる可能性があります。

問題の原因はまだ不明ですが、これは NOT MODIFIED (304) コードであるため、応答が利用可能になる前に、Silverlight の低レベル レイヤーで何らかのキャッシュが発生していることが強く疑われます。

于 2011-06-10T11:12:00.660 に答える