1

httpclient ライブラリを使用してサーバーに接続する W8 アプリケーションを移植しています。

アプリケーションの主な目的は画像を送信することですが、WP8 で画像を送信しようとすると、404 が見つかりませんというエラーが発生しました (Microsoft が多くのエラーを 404 に再マップしたようです)。サーバー ログを確認すると、サーバーが失敗する前にイメージの約 1/4 を受信したことを確認します。同じ機能が私の W8 アプリケーション (3G ではテストされていません) で正常に動作するようで、Wifi 接続を使用すると WP8 でも動作します。問題は待ち時間かもしれないと思うので、Keep-Alive ヘッダーを追加しようとしましたが成功しませんでした。私が持っている現在のコードは次のとおりです。

using (HttpClient httpClient = new HttpClient())
{
    httpClient.Timeout = TimeSpan.FromMinutes(10);

    Stream streamW = new MemoryStream();
    this.bSyncOK = await Send(streamW);
    streamW.Seek(0, SeekOrigin.Begin);
    HttpResponseMessage response = await httpClient.PostAsync(sUri, new StreamContent(streamW));

    if (response.IsSuccessStatusCode)
    {
        Stream streamR = await response.Content.ReadAsStreamAsync();
        this.bSyncOK = await Recv(streamR);
        streamR.Dispose();
    }
    else
        throw new HostNotFoundException();
}

同じサーバーを使用して、IOS や Android などの他のプラットフォームに問題なく写真をアップロードできます。

4

1 に答える 1

0

フィドラーを使用して問題を再現し、モデムの速度をシミュレートしました。この問題は、Phone の HTTPWebRequest 実装が、リクエストが約 60 秒を超えるたびにタイムアウトになるために発生しています。デバッガーでは、ネイティブ レイヤーから ERROR_INTERNET_TIMEOUT が返されていることがわかります。現時点で考えられる唯一の回避策は、サーバーがサポートしていると仮定して、ファイルをより小さな POST で送信することです。

于 2013-06-20T08:12:06.167 に答える