1

我正在移植使用httpclient庫連接到我們的服務器的W8應用程序。HttpClient Portable返回404在WP8上未找到

該應用程序的主要目的是發送圖像,但是當我嘗試在WP8上發送圖片時,我得到了一個404未找到的錯誤(似乎微軟重新映射爲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等平臺的照片沒有問題。

+0

您是否嘗試捕獲網絡跟蹤? – TheESJ

+0

@TheESJ我試圖使用Wireshark,我可以看到服務器開始接收流,但突然停止接收信息。經過很多次重試後,我可以發送一張圖片(可能是20-30次重試)。 – Jose

+0

是否有可能共享完整的repro代碼? – TheESJ

回答

0

我使用fiddler重現了這個問題來模擬調制解調器的速度。問題在發生,因爲電話的HTTPWebRequest實現將超過約60秒的請求。在調試器中,我看到他們從原生層獲取ERROR_INTERNET_TIMEOUT。我現在能想到的唯一解決方法是使用較小的POST文件發送文件,假設服務器支持該文件。

+0

感謝@TheESJ的幫助,我已經實現了圖片拆分以避免此問題。在我的倍數tryes中,我創建了一個C++組件,但結果相同,所以似乎網絡實現存在問題。 – Jose

相關問題