如何在Simple OData Client中启用gzip压缩?

Dav*_*nez 6 .net c# compression dynamics-crm odata

我正在尝试使用像这样的简单OData客户端库(C#)执行从CRM Dynamics检索信息的查询:

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));
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它非常慢,因为我对mss_transaccions表的查询有7200个实体.我正在看Fiddler的输出,我可以看到它正在尝试下载大约20 MB的信息.

我试图在谷歌浏览器上运行相同的查询,我可以看到默认情况下获得的响应以gzip格式压缩,从20MB到仅仅500KB.所以我推断Simple OData Client没有进行任何压缩,这就是为什么它非常慢.

此外,来自OData Simple Client的请求要求提供另外4MB的元数据信息,而Chrome或简单的HttpClient请求则不需要进行该调用.

有什么我可以做的来改善它并启用压缩吗?

谢谢.

Dav*_*nez 2

我终于能够启用压缩并加快整个过程。整个讨论可以在这里找到:https://github.com/object/Simple.OData.Client/issues/238

为了简单快速地完成它,您只需使用以下代码修改 ODataSettings 实例中的消息处理程序:

settings.OnApplyClientHandler = handler =>
            {
                handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            };
Run Code Online (Sandbox Code Playgroud)

现在,httpRequests 以 gzip、deflate 的形式发送,并在响应时正确解压缩。