System.Net.Http.HttpRequestException Fehler beim Kopieren von Inhalt in einen Stream

8

Ich verwende die Klasse HttpClient im .Net 4.5.2-Framework. Ich mache einen PostAsync zu einem Drittanbieter-Webdienst. In 80% der Fälle funktioniert dieser Beitrag, in 20% der Fälle ist unsere Antwort verkürzt. In dieser Situation erhalten wir die folgende Ausnahme:

  

System.Net.Http.HttpRequestException: Fehler beim Kopieren von Inhalten in   ein Stream. --- & gt; System.IO.IOException: Daten können nicht von der   Transportverbindung: Eine bestehende Verbindung wurde zwangsweise geschlossen   der Remote-Host. --- & gt; System.Net.Sockets.SocketException: Eine vorhandene   Verbindung wurde zwangsweise vom Remote-Host bei geschlossen   System.Net.Sockets.NetworkStream.BeginRead (Byte [] Puffer, Int32   Offset, Int32-Größe, AsyncCallback-Callback, Objektzustand) --- Ende   der inneren Ausnahme Stapelspur --- um   System.Net.Sockets.NetworkStream.BeginRead (Byte [] Puffer, Int32   Offset, Int32-Größe, AsyncCallback-Callback, Objektzustand) um   System.Net.FixedSizeReader.StartReading () um   System.Net.Security._SslStream.StartFrameHeader (Byte [] Puffer, Int32   Offset, Int32-Anzahl, AsyncProtocolRequest asyncRequest) um   System.Net.Security._SslStream.StartReading (Byte [] Puffer, Int32   Offset, Int32-Anzahl, AsyncProtocolRequest asyncRequest) um   System.Net.Security._SslStream.ProcessRead (Byte [] Puffer, Int32   Offset, Int32-Anzahl, AsyncProtocolRequest asyncRequest) um   System.Net.TlsStream.BeginRead (Byte [] Puffer, Int32 Offset, Int32   Größe, AsyncCallback asyncCallback, Objekt asyncState) um   System.Net.ConnectStream.BeginReadWithoutValidation (Byte [] Puffer,   Int32-Offset, Int32-Größe, AsyncCallback-Callback, Objektstatus) um   System.Net.ConnectStream.BeginRead (Byte [] Puffer, Int32 Offset, Int32   Größe, AsyncCallback-Callback, Objektstatus) um   System.Net.Http.HttpClientHandler.WebExceptionWrapperStream.BeginRead (Byte []   Puffer, Int32-Offset, Int32-Zählung, AsyncCallback-Callback, Objekt   state) bei System.Net.Http.StreamToStreamCopy.StartRead ()

Eine nachfolgende identische Anfrage ist erfolgreich. Es handelt sich nicht um eine Anfrage, die wir wiederholen können, da das Geschäft bereits platziert wurde. Das bringt uns in eine peinliche Situation.

Das ist mein Code:

%Vor%

Der Drittanbieterdienst speichert den Datensatz erfolgreich in seiner Datenbank und sieht keine offensichtlichen Ausnahmen an seinem Ende. Sie haben bemerkt, dass die fehlgeschlagenen Anfragen im Allgemeinen länger (etwa 18-30 Sekunden) dauerten, um in die Datenbank zu schreiben als die erfolgreichen Anfragen.

Danke für Ihre Hilfe

    
jonho 20.10.2015, 10:07
quelle

1 Antwort

10

Wir haben dieses Problem mit zwei Codeänderungen gelöst:

  1. Entsage die httpResponseMessage und arbeite einfach mit einem einfachen DTO

    %Vor%
  2. Downgrade der Version von HTTP auf v1.0

    %Vor%

, was den Effekt hat, diesen Http-Header hinzuzufügen

%Vor%

anstatt dies

%Vor%     
jonho 03.11.2015, 14:32
quelle

Tags und Links