2009-12-16 21 views
0

我們有一些ASP.NET的Web服務,根據此條件完美風暴失敗:異步Web服務調用使用動態壓縮到IIS7不工作

  1. IIS7
  2. 動態壓縮開啓時
  3. Web服務調用是異步的

如果是IIS 6,或者我們關閉動態壓縮或同步調用Web服務,它會正常工作。

它在調用SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)時出現'Unexpected end of file'錯誤失敗。

使用Fiddler,我看到來自IIS 6的響應具有「分塊」傳輸編碼和無內容長度。來自IIS 7的響應不會被分塊並且具有內容長度。文件錯誤結束髮生在內容長度後面1個字符處。

如果我攔截Fiddler中的消息並將其更改爲chunked,則不會出現錯誤。答案可能是將其更改爲在IIS 7中分塊(我試圖做和失敗),但我不覺得我應該這樣做:我認爲它應該工作!

回答

0

我不得不爲Microsoft打開MSDN支持憑單,但得到了我的答案。

答案在這裏是一個簡單的客戶端解決方案。我以前WebRequest的方法是這樣的:

protected override WebRequest GetWebRequest(Uri uri) 
{ 
    var request = base.GetWebRequest(uri); 
    request.Headers.Add("Accept-Encoding", "gzip"); 
    return request; 
} 

更好的方法是這樣的:

protected override WebRequest GetWebRequest(Uri uri) 
{ 
    var request = (HttpWebRequest) base.GetWebRequest(uri); 
    request.AutomaticDecompression = DecompressionMethods.GZip; 
    return request; 
} 

我不完全知道爲什麼這個工程:在請求和響應標頭是完全一樣的,但客戶似乎能夠管理它回來的響應。

即使IIS6響應被分塊,而IIS7響應被分塊,IIS6和IIS7也可以同時工作。如果任何人能夠幫助解釋爲什麼這會起作用,這可能對社區有幫助。