簡體   English   中英

使用動態壓縮對IIS7進行異步Web服務調用不起作用

[英]Async Web Service calls to IIS7 with Dynamic Compression don't work

在這種完美的條件下,我們有一些ASP.NET Web服務失敗:

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

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

它在對SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)的調用中失敗,並出現“意外的文件結尾”錯誤。

使用Fiddler,我看到來自IIS 6的響應具有“塊式”的傳輸編碼,並且沒有內容長度。 IIS 7的響應未分塊,並且具有內容長度。 文件結束錯誤發生在內容長度之后的1個字符處。

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

我必須為此與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都適用。 如果有人可以幫助您確切解釋其工作原理,則可能對社區有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM