私はこの(C#の)のようなシンプルなのODataクライアントライブラリでCRMダイナミクスから情報を取得するクエリを実行しようとしています: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の情報をダウンロードしようとしていることがわかります。
私はGoogle Chromeで同じクエリを実行しようとしましたが、デフォルトでは、取得されたレスポンスはgzip形式で圧縮され、20MBからわずか500KBに圧縮されています。だから私は、単純なODataクライアントはどんな種類の圧縮も行っていないと推測しています。そのため、それは非常に遅いです。
さらに、OData Simple Clientからのリクエストにより、メタデータ情報が要求されます。これにはさらに4MBが追加されますが、Chromeや単純なHttpClientリクエストではその呼び出しを行う必要はありません。
これを改善して圧縮を有効にするためにできることはありますか?
ありがとうございます。
私はODataクライアントの経験はほとんどありませんが、送信要求の "Accept-Encoding:gzip、deflate"ヘッダーを確認/設定/変更する方法はありますか?それは少なくとも、サーバーを起動して圧縮する必要があります。クライアントは、それを解凍するストリームを使用することを望んでいます。 –
@MarvinSmitこれはODataの質問ではなく、特定のクライアントライブラリであるSimple.Odataの質問です。発信要求がライブラリによって管理されているとすれば、それを変更することはそれほど簡単ではありません(ライブラリがそれをサポートしていない場合)。技術的には、はい、ちょうど1つは、HttpClientをサブクラス化し、圧縮ヘッダー情報を送信する必要があります....しかし、SImple.Odataでそれを行う方法は?私は同じボートにあります;) – TomTom
上記のコードを与え、私は "beforesend" - > "Headers.Add"受け取りタイプの期待し、スピンを与える? –