2015-07-08 20 views
9

Ich bin dieSystem.Net.ProtocolViolationException: Sie müssen schreiben ContentLength auf die Anfrage Stream-Bytes vor dem Aufruf von [Start] GetResponse

„System.Net.ProtocolViolationException bekommen: Sie müssen schreiben ContentLength auf die Anfrage Stream-Bytes vor dem Aufruf von [Begin] GetResponse "beim Aufruf der Methode" BeginGetResponse "der Webanfrage.

Dies ist mein Code:

try 
{ 
    Stream dataStream = null; 
    WebRequest Webrequest; 
    Webrequest = WebRequest.Create(this.EndPointAddress); 
    Webrequest.Credentials = new NetworkCredential(this.username, this.password); 

    Webrequest.ContentType = "text/xml"; 
    Webrequest.Method = WebRequestMethods.Http.Post;      

    byteArray = System.Text.Encoding.UTF8.GetBytes(xmlRequest.Children[0].InnerXML); 

    Webrequest.ContentLength = byteArray.Length; 

    dataStream = Webrequest.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length);     

    RequestState rs = new RequestState(); 
    rs.Request = Webrequest;      

    IAsyncResult r = (IAsyncResult)Webrequest.BeginGetResponse(new AsyncCallback(RespCallback), rs); 
} 
catch (Exception exc) 
{      
    TRACE.EXCEPTION(exc); 
} 
finally 
{ 
    dataStream.Close(); 
} 

Insbesondere nach auf die Funktion "GetRequestStream()" aufrufen, die Bach diese Ausnahme für die Länge wirft:

‚stream .Length 'hat eine Ausnahme vom Typ' System.NotSupportedException 'ausgelöst.

Was könnte das verursachen?

+0

Bitte nicht hinzufügen „alot gesucht“ und „Danke“ zu Ihrem Beitrag. Um Aufwand zu zeigen - post-Code (ok wie es in der aktuellen Post ist) und Links zu Lösungen, die Sie mit kurzen Satz versucht haben, die es Ihr Problem nicht gelöst hat. –

+0

mögliches Duplikat von [System.Net.ProtocolViolationException Ausnahme C# Post und Getresponse] (http://stackoverflow.com/questions/18192423/system-net-protocolviolationexception-exception-c-sharp-post-and-getresponse) –

+0

Diese Frage erklärt einen anderen Fehler als dieser, also wird er nicht dupliziert. – user3815821

Antwort

10

Diese schließlich arbeitete unter Verwendung:

using (dataStream = Webrequest.GetRequestStream()) 
{ 
    dataStream.Write(byteArray, 0, byteArray.Length); 
} 

Statt:

dataStream = Webrequest.GetRequestStream(); 
dataStream.Write(byteArray, 0, byteArray.Length); 
+1

weil im letzteren Fall der Strom nicht richtig gespült wird, glaube ich. –

3

Der Code sollte für .NET 2.0 von 4.0 arbeiten und sollten Sie den Strom nach dem Schreiben schließen:

dataStream = Webrequest.GetRequestStream(); 
dataStream.Write(byteArray, 0, byteArray.Length); 
datastream.Close(); 
0

Überprüfen Sie, ob Ihr Server für die Annahme großer Dateien eingerichtet ist. Möglicherweise stellen Sie fest, dass Sie in das 4-Megabyte-Standardlimit geraten.

folgendes Datei web.config für eine größere Datei-Upload hinzufügen:

<system.webServer> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="104857600" /> 
     </requestFiltering> 
    </security> 
</system.webServer>