Entwickler-Ecke

ASP.NET und Web - ProtocolViolationException


BlackMatrix - Di 24.08.10 23:19
Titel: ProtocolViolationException
Ich bekomme gerade eine Fehlermeldung, die ich bisher noch nie bekommen habe.

Ich versuche mich bei einem Portal einzuloggen und führe einen Postrequest durch.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8";
            request.CookieContainer = cookiecontainer;
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] loginDataBytes = ASCIIEncoding.ASCII.GetBytes(sendestring);
            request.ContentLength = loginDataBytes.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(loginDataBytes, 0, loginDataBytes.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();


Bei HttpWebResponse response = (HttpWebResponse)request.GetResponse(); erhalte ich folgende Exception:

Zitat:
ProtocolViolationException
Sie müssen ContentLength-Byte für den Anforderungsstream schreiben, bevor Sie [Begin]GetResponse aufrufen.


Worin liegt der Fehler?

MfG BlackMatrix


Yogu - Mi 25.08.10 00:29

Ich weiß nicht, ob das den Fehler ausgelöst hat, aber du hast vergessen, den Request-Stream zu schließen. Laut der Dokumentation [http://msdn.microsoft.com/de-de/library/d4cek6cc%28v=VS.80%29.aspx#CodeSpippet2] sollte das getan werden.


BlackMatrix - Mi 25.08.10 01:22

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Ich weiß nicht, ob das den Fehler ausgelöst hat, aber du hast vergessen, den Request-Stream zu schließen. Laut der Dokumentation [http://msdn.microsoft.com/de-de/library/d4cek6cc%28v=VS.80%29.aspx#CodeSpippet2] sollte das getan werden.


Schließe ich den Stream vor   HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Bekomme ich folgende Fehlermeldung:

Zitat:
Der Remoteserver hat einen Fehler zurückgegeben: (417) Expectation Failed.


Schließe ich den Stream nicht, kommt die oben genannte Fehlermeldung.


Trashkid2000 - Mi 25.08.10 08:04

Der Remoteserver hat einen Fehler zurückgegeben: (417) Expectation Failed.

Also, der Stream muss geschlossen werden, da hat @Yogu Recht.

Der Fehler ist mir schon einmal bei einem früheren Post untergekommen, der sich um das gleiche Thema dreht. Deshalb weiss ich, woran es liegt. Du musst nur eine Property des Webrequests auf false stellen.


C#-Quelltext
1:
request.ServicePoint.Expect100Continue = false;                    

Kannst mal googeln, was diese Property macht.

Ansonsten mal den Link auf das andere Posting:
http://www.c-sharp-forum.de/viewtopic.php?t=101142&start=20&postorder=asc

LG, Marko


BlackMatrix - Mi 25.08.10 10:10

user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
Der Remoteserver hat einen Fehler zurückgegeben: (417) Expectation Failed.

Also, der Stream muss geschlossen werden, da hat @Yogu Recht.

Der Fehler ist mir schon einmal bei einem früheren Post untergekommen, der sich um das gleiche Thema dreht. Deshalb weiss ich, woran es liegt. Du musst nur eine Property des Webrequests auf false stellen.


C#-Quelltext
1:
request.ServicePoint.Expect100Continue = false;                    

Kannst mal googeln, was diese Property macht.

Ansonsten mal den Link auf das andere Posting:
http://www.c-sharp-forum.de/viewtopic.php?t=101142&start=20&postorder=asc

LG, Marko


Streamclose ist nicht unbedingt notwendig, aber deine Property machts :]

Vielen Dank.