Ich versuche, eine Abfrage auszuführen, die Informationen aus einem CRM Dynamics mit der Simple OData-Client-Bibliothek wie dieser (C#) ruft:Wie aktiviert man die gzip-Komprimierung im Simple OData Client?
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));
}
Das funktioniert zwar, ist es extrem langsam, weil meine Abfrage auf dem mss_transaccions Tabelle hat 7200 Einheiten. Ich schaue auf die Ausgabe in Fiddler und ich kann sehen, dass es versucht, etwa 20 MB Informationen herunterzuladen.
Ich habe versucht, die gleiche Abfrage auf Google Chrome auszuführen, und ich konnte sehen, dass standardmäßig die erhaltene Antwort im Gzip-Format komprimiert wird, von 20 MB auf nur 500 KB. Ich folge daher, dass der Simple OData Client keine Komprimierung ausführt und deshalb so langsam ist.
Darüber hinaus fragt die Anfrage von OData Simple Client nach Metadaten Informationen, die weitere 4MB hinzufügen, während Chrome oder eine einfache HttpClient Anfrage diesen Aufruf nicht machen müssen.
Gibt es etwas, was ich tun kann, um das zu verbessern und die Komprimierung zu aktivieren?
Vielen Dank.
Ich habe wenig Erfahrung mit dem OData-Client, aber gibt es eine Möglichkeit, die Header "Accept-Encoding: gzip, deflate" auf der ausgehenden Anfrage zu überprüfen/setzen/ändern? Das sollte zumindest den Server hereintreten lassen und ihn komprimieren. Es würde dann hoffen, dass der Client einen Strom verwendet, der ihn dekomprimiert. –
@MarvinSmit Dies ist, warum dies keine OData-Frage ist, sondern eine Simple.Odata-Frage - das ist eine bestimmte Client-Bibliothek. Wenn die ausgehende Anforderung von einer Bibliothek verwaltet wird, ist ihre Änderung nicht so trivial wie sie klingt (wenn die Bibliothek dies nicht unterstützt). Technisch gesehen, ja, man muss "nur" den HttpClient ableiten und dafür sorgen, dass er die Kompressions-Header-Information übermittelt .... aber wie geht das in Simple.Odata? Ich bin im selben Boot;) – TomTom
gegeben Ihren Code oben, würde ich erwarten, dass ein "predesend" -> "Headers.Add" der akzeptieren Art und geben Sie eine Drehung? –