[英]Async Web Service calls to IIS7 with Dynamic Compression don't work
在這種完美的條件下,我們有一些ASP.NET 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.