我試圖執行從CRM動態,像這樣(C#)簡單的OData客戶端庫檢索信息的查詢:如何在Simple OData Client中啓用gzip壓縮?
var settings = new ODataClientSettings(resource + "/api/data/v8.0/");
settings.BeforeRequest = (request) =>
{
request.Headers.Clear();
request.Headers.Add("Authorization", accesstoken.AccessTokenType + " " + accesstoken.AccessToken);
};
settings.PayloadFormat = ODataPayloadFormat.Json;
var client = new ODataClient(settings);
var annotations = new ODataFeedAnnotations();
var transactions = await client.For("mss_transaccions").FindEntriesAsync(annotations);
while (annotations.NextPageLink != null)
{
transactions = transactions.Union(await client.For("mss_transaccions").FindEntriesAsync(annotations.NextPageLink, annotations));
}
雖然這個作品,這是非常緩慢的,因爲我對mss_transaccions查詢表有7200個實體。我正在看Fiddler的輸出,我可以看到它正在嘗試下載大約20 MB的信息。
我試着在谷歌瀏覽器上運行相同的查詢,我可以看到,默認情況下獲得的響應是以gzip格式壓縮的,從20MB變爲僅僅500KB。所以我推斷簡單OData客戶端沒有進行任何類型的壓縮,這就是爲什麼它非常慢。
此外,來自OData Simple Client的請求要求提供另一個4MB的元數據信息,而Chrome或簡單的HttpClient請求不需要進行該調用。
有什麼我可以做的,以改善這一點,並啓用壓縮?
謝謝。
我對OData客戶端有一點經驗,但是有沒有辦法可以檢查/設置/修改傳出請求上的「Accept-Encoding:gzip,deflate」標頭?至少應該讓服務器啓動並壓縮它。然後它會希望客戶端使用一些解壓縮它的流。 –
@MarvinSmit這就是爲什麼這不是一個OData問題,而是一個Simple.Odata問題 - 這是一個特定的客戶端庫。鑑於傳出請求是由庫管理的,修改它並不像聽起來那麼簡單(如果庫不支持它)。技術上,是的,一個「只」必須繼承HttpClient的子類並使其提交壓縮標題信息....但是如何在SImple.Odata中執行此操作?我在同一條船上;) – TomTom
上面給出你的代碼,我期望接受類型的「beforesend」 - >「Headers.Add」,並給它一個旋轉? –