我在使用Silverlight 5請求Gzip內容時遇到了麻煩。爲了減少使用的帶寬,我想使用gzip來處理從我們的web服務請求的內容,但不幸的是,這不起作用。在Silverlight中請求GZip內容
我正在使用客戶端堆棧併發送一個HttpWebRequest。我嘗試設置Accept-Encoding標頭,但它告訴我,我不允許直接更改它 - 並且沒有其他屬性!
那麼如何發送自定義的Accept-Encoding標頭?
這是我在我的應用程序構造函數的代碼:
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
這是我創建的請求,並設置頁眉:
var webRequest = (HttpWebRequest)WebRequest.Create(requestUri);
webRequest.Headers["Accept-Encoding"] = "gzip, deflate";
這是例外:
{System.ArgumentException: The 'Accept-Encoding' header cannot be modified directly.
Parameter name: name
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at MyClass}
只是要注意:我有一個WP7/WP8庫,使得這些請求的處理更容易。它應該是爲Silverlight編譯它的一個簡單問題,並將標題和Content-Encoding檢查更改爲您的自定義檢查,並且您應該儘量少用額外的代碼。看到這裏:https://github.com/dotMorten/SharpGIS.GZipWebClient/ – dotMorten
我在我的研究中發現你的圖書館,它可能對別人有用,但對我來說它沒有用。 :)我已經有一個工作的基礎設施,並且我在客戶端所做的所有事情都是另外發送我的自定義標題,並在我的解析方法中注入一個GZipStream,但前提是內容編碼是gzip。這樣,當響應不是預期的gzip時,我的代碼仍然可以工作。 – user1908061
??如果回覆沒有被壓縮,我的代碼不會解壓縮。您可以通過調用RegisterPrefix在應用程序啓動時只寫兩行代碼,並且整個應用程序中的所有Web請求現在都會盡可能地嘗試獲取gzip(但您也可以按照GZipWebClient的請求執行此操作) – dotMorten