2Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
693
693
EMPFEHLEN
-
Hi Leute,
nun bekomme ich zum ersten mal die Gelegenheit auch etwas unter C# zu schreiben, wünschte die Umstände wären allerdings etwas schöner
Leider habe ich wenig bis keine Ahnung von C#, erhoffe mir aber trotzdem hierbei etwas Hilfe.
Kurze Einleitung zu dem Fehler. Ich selbst schreibe ein Server Programm auf Linux, ganz banal mit send()/recv() realisiert. Mein Arbeits-Kollege, schreibt für Windows mit C#/.NET die Client Anwendung.
Nun schickt er mir eine HTTP-Anfrage, ich berechne etwas und möchte dann mit einer Datei antworten. Soweit so gut, jedesmal reagiert der Client mit oben genannter Exception.
Nun sagt er, es sei Fehler des Servers, wg. falschem HTTP-Header, jedoch antworte ich mit dem Header der mit vorgegeben wurde, wie folgt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
POST /TWVS/TVWSService/loadKML HTTP/1.1 Content-Type: application/x-www-form-urlencoded Host: www.example.com Content-Length: 13466 Connection: Keep-Alive XMLContent=<?xml version="1.0" encoding="UTF-8"?> […] HTTP/1.1 200 OK Date: Tue, 08 Nov 2011 11:18:03 GMT Server: TWVS Server Accept-Ranges: bytes Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 <kml> […] </kml>
Nun, wie gesagt habe ich nicht viel Ahnung von der Materie, allerdings laut Google scheint es wohl am Header zu liegen.
Erstmal, wie kann ich mehr Informationen bzgl. des Fehlers (von .NET) bekommen?
Dann würde mich interessieren, wo der Fehler wirklich liegt. Client oder Server und vorallem warum und wie kann man ihn vermeiden.
Wir haben schon andere verschiedene Header ausprobiert, jedoch lieferte keiner irgendwelchen Erfolg.
Auch mit Google, kam ich bisher nur spärlich weiter. Gefunden habe ich z.b folgendes:
Code :1 2 3 4 5 6 7
<configuration> <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net> </configuration>
Ich habe ihm mal den Hinweis damit gegeben, allerdings hieß es das dies Server-seitiger Code wäre.
Zumal er sagt, er würde nur Standart-Funktionen benutzen und Standart-Header erwarten. Leider scheint er zumindest in diesem Punkt auch nicht viel mehr Ahnung zu haben als ich. 
Ich wäre echt dankbar ein paar Meinungen und vorallem Hilfen dazu zubekommen.
Grüße
JennestaGeändert von Jennesta (24.01.12 um 10:17 Uhr)
Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
Ich hätte da 2 vorschläge.
1. Wenn der Server mit Transfer-Encoding: chunked antworted dann muss auch der content entsprechend "formatiert" sein.
Soll heissen in Blöcke unterteilt, wobei jeder Block mit der Anzahl an bytes ( in Hexa ) beginnt.
Danach folgt ein {CR}{LF}.
Dann die Daten die wiederum mit einem {CR}{LF} enden müssen.
z.B.
Beispiel von hier: http://en.wikipedia.org/wiki/Chunked_transfer_encodingCode :1 2 3 4 5 6 7 8
25 This is the data in the first chunk 1C and this is the second one "This is the data in the first chunk\r\n" (37 chars => hex: 0x25) "and this is the second one\r\n" (28 chars => hex: 0x1C)
Einfacher wäre natürlich das Transfer-Encoding: chunked weg zu lassen und stattdessen eine Content-Length zu definieren.
2. Nachdem der Server unter Linux läuft:
Linux verwendet {LF} als Newline.
Wohingegen Windows {CR}{LF} verwendet und genau das erwartet c# auch.
Mit anderen Worten : überprüf mal ob die einzelnen Zeilen der Response mit einem {LF} oder einem {CR}{LF} enden.In order to understand recursion, one must first understand recursion.
-
Hi rd4eva,
danke für die Ausführliche Hilfe. Das mit dem {CR}, welches ich nicht genutzt habe, hat in der Tat mein Problem mit dem Header gelöst.
Es wird momentan noch mind eine andere Exception geworfen, aber vielleicht ist das mit deinem Hinweis bzgl. der chunks zu lösen, dauert nur etwas, bis ich das auch testen kann.
GrüßeWas soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
Schön das es geholfen hat.
Noch als Nachtrag
Das ist natürlich quatsch.<httpWebRequest useUnsafeHeaderParsing="true" />
...
Ich habe ihm mal den Hinweis damit gegeben, allerdings hieß es das dies Server-seitiger Code wäre.
Die Header müssen ja schließlich nicht nur vom Server geparst werden sondern auch vom client.
Wie bereits oben geschrieben erwartet der client halt folgendes Format:
Code :1 2 3 4 5
Version statuscode statustext{CR}{LF} Headerkey: Headervalue{CR}{LF} ... {CR}{LF} content
Und genau dieses Verhalten wird (u.a.) mit oben genanntem schippsel deaktiviert.
Siehe Doku: http://msdn.microsoft.com/en-us/libr...erparsing.aspx
When this property is set to false, the following validations are performed during HTTP parsing:
In end-of-line code, use CRLF; using CR or LF alone is not allowed.
...In order to understand recursion, one must first understand recursion.
-
Hi,
nun habe ich auch ein bisschen mit Wireshark gespielt und alles aus dem Header geworfen, was erstmal unwichtig scheint. Nun funktioniert es auch. Vielleicht werde ich wieder langsam Header-Zeilen einfügen, jedoch sagt man ja auch oft so schön "Never change a running system"
Aber dir vielen Dank für die ausführliche Hilfe.
Ach aber eine Frage hätte ich noch. Kann man irgendwo seinen Header verifizieren lassen? Ich habe mir zwar auch mal diese Seite angesehen, allerdings ist das schon krass viel Information. Und auch wenn ich weiß, wie es vorgesehen ist, kann ich manchmal schlecht herauslesen, ob ich es richtig umgesetzt habe.
Grüße JennestaWas soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
Da muss ich passen.Ach aber eine Frage hätte ich noch. Kann man irgendwo seinen Header verifizieren lassen?
Sowas ist mir bisher nicht untergekommen.In order to understand recursion, one must first understand recursion.
Ähnliche Themen
-
Frage zur Exception java.net.MalformedURLException: unknown protocol:
Von RalU im Forum JavaAntworten: 3Letzter Beitrag: 12.08.10, 20:46 -
SQL Exception --> integrity constraint violation: unique constraint or index violatio
Von roontafloor im Forum JavaAntworten: 1Letzter Beitrag: 13.11.09, 18:19 -
EXCEPTION ACCESS VIOLATION in C DLL
Von roxX0r im Forum JavaAntworten: 0Letzter Beitrag: 02.06.08, 14:24 -
[MySQL] Client does not support authentication protocol requested by server
Von Thomas D im Forum PHPAntworten: 0Letzter Beitrag: 29.05.08, 00:12 -
Error 438 occurred
Von sunygirl im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 08.07.04, 10:07





Zitieren
Login





