Ich verwende die HttpClient Klasse, um mit einem zu kommunizieren Webdienst in meiner WPF-Anwendung.
Wenn ich aufeinanderfolgende GET-Anfragen für dieselbe Verbindung mache, funktioniert alles einwandfrei. Wenn ich jedoch aufeinanderfolgende PUT / PATCH-Anfragen für die gleiche Verbindung mache, wird die erste Anfrage genau ausgeführt und ich erhalte eine Antwort, aber die zweite Anfrage enthält nicht den Körper in der Anfrage und ich erhalte den berüchtigten Fehler "Der Server hat ein Protokoll begangen Verletzung. Abschnitt = ResponseStatusLine ".
Meine Anforderungen werden erfolgreich abgeschlossen, wenn ich die Verbindung nach jeder Anforderung manuell schließe, indem ich Verbindung: schließen zum Header hinzufüge. Diese "Lösung" ist ein schlechtes Muster und die Leistung wird nicht angemessen skaliert.
Im Folgenden finden Sie eine brandneue Version einer Liste meiner TCP-Stream-Ausgaben aus den gesendeten Anforderungen:
Wireshark: Folgen Sie der TCP-Stream-Ausgabe
%Vor%Beachten Sie, dass dem zweiten PATCH das Objekt fehlt, mit dem es patchen soll. Wenn ich die Reihenfolge des PATCHs ändere, fehlt dem zweiten PATCH immer noch das Objekt.
Dieser Fehler scheint bei einigen bekannten Lösungen, die ich ausprobiert habe, üblich zu sein. Sie bestehen aus dieser Lösung , bei der die useUnsafeHeaderParsing-Eigenschaft auf TRUE gesetzt und Keep-Alive festgelegt wird Eigenschaft auf FALSE in der Web.Config. Ich habe auch die Lösung versucht, diese Eigenschaften auf folgende Weise einzustellen:
%Vor%Keine dieser Lösungen hat funktioniert. Es sollte beachtet werden, dass bei Verwendung des Http Debugging-Proxy-Tools Fiddler, um diese Anforderungen zu erfassen, keine Fehler angezeigt werden.
Was ich also möchte, ist, wenn jemand eine gute Lösung kennt, um diesen Fehler zu beheben, so dass ich mehrere Anfragen in einer Verbindung machen kann, ohne den Hauptteil eines Updates zu verlieren. Wenn mehr Details benötigt werden, bin ich glücklich, sie zu liefern.
Das zugrunde liegende Problem besteht darin, dass die PATCH-Antwort Inhalt innerhalb des Antwortkörpers enthält. Stellen Sie sicher, dass der Server beim Senden eines No Contents keinen Inhalt sendet.
Nach langem Debuggen und Lesen wurde mir klar, dass ich versuchte, die Datei Web.Config der WPF-Anwendung anstelle der Datei app.config zu bearbeiten!
Wenn Sie also diesen Code in der Datei app.config im Stammverzeichnis des Konfigurations-Tags für eine WPF-Anwendung ablegen, wird das Problem behoben.
%Vor%Ich verwende die HttpClient Klasse, um mit einem zu kommunizieren Webdienst in meiner WPF-Anwendung.
Wenn ich aufeinanderfolgende GET-Anfragen für dieselbe Verbindung mache, funktioniert alles einwandfrei. Wenn ich jedoch aufeinanderfolgende PUT / PATCH-Anfragen für die gleiche Verbindung mache, wird die erste Anfrage genau ausgeführt und ich erhalte eine Antwort, aber die zweite Anfrage enthält nicht den Körper in der Anfrage und ich erhalte den berüchtigten Fehler "Der Server hat ein Protokoll begangen Verletzung. Abschnitt = ResponseStatusLine ".
Meine Anforderungen werden erfolgreich abgeschlossen, wenn ich die Verbindung nach jeder Anforderung manuell schließe, indem ich Verbindung: schließen zum Header hinzufüge. Diese "Lösung" ist ein schlechtes Muster und die Leistung wird nicht angemessen skaliert.
Im Folgenden finden Sie eine brandneue Version einer Liste meiner TCP-Stream-Ausgaben aus den gesendeten Anforderungen:
Wireshark: Folgen Sie der TCP-Stream-Ausgabe
%Vor%Beachten Sie, dass dem zweiten PATCH das Objekt fehlt, mit dem es patchen soll. Wenn ich die Reihenfolge des PATCHs ändere, fehlt dem zweiten PATCH immer noch das Objekt.
Dieser Fehler scheint bei einigen bekannten Lösungen, die ich ausprobiert habe, üblich zu sein. Sie bestehen aus dieser Lösung , bei der die useUnsafeHeaderParsing-Eigenschaft auf TRUE gesetzt und Keep-Alive festgelegt wird Eigenschaft auf FALSE in der Web.Config. Ich habe auch die Lösung versucht, diese Eigenschaften auf folgende Weise einzustellen:
%Vor%Keine dieser Lösungen hat funktioniert. Es sollte beachtet werden, dass bei Verwendung des Http Debugging-Proxy-Tools Fiddler, um diese Anforderungen zu erfassen, keine Fehler angezeigt werden.
Was ich also möchte, ist, wenn jemand eine gute Lösung kennt, um diesen Fehler zu beheben, so dass ich mehrere Anfragen in einer Verbindung machen kann, ohne den Hauptteil eines Updates zu verlieren. Wenn mehr Details benötigt werden, bin ich glücklich, sie zu liefern.
Tags und Links wpf c# dotnet-httpclient