tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von rd4eva
  • 1 Beitrag von rd4eva
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
693
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    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
    Jennesta
    Geä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.

  2. #2
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    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.
    Code :
    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)
    Beispiel von hier: http://en.wikipedia.org/wiki/Chunked_transfer_encoding

    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.
    Jennesta bedankt sich. 
    In order to understand recursion, one must first understand recursion.

  3. #3
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    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üße
     
    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.

  4. #4
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Schön das es geholfen hat.

    Noch als Nachtrag
    <httpWebRequest useUnsafeHeaderParsing="true" />
    ...
    Ich habe ihm mal den Hinweis damit gegeben, allerdings hieß es das dies Server-seitiger Code wäre.
    Das ist natürlich quatsch.
    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.
    ...
    Jennesta bedankt sich. 
    In order to understand recursion, one must first understand recursion.

  5. #5
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    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 Jennesta
     
    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.

  6. #6
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    Ach aber eine Frage hätte ich noch. Kann man irgendwo seinen Header verifizieren lassen?
    Da muss ich passen.
    Sowas ist mir bisher nicht untergekommen.
     
    In order to understand recursion, one must first understand recursion.

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 12.08.10, 20:46
  2. Antworten: 1
    Letzter Beitrag: 13.11.09, 18:19
  3. EXCEPTION ACCESS VIOLATION in C DLL
    Von roxX0r im Forum Java
    Antworten: 0
    Letzter Beitrag: 02.06.08, 14:24
  4. Antworten: 0
    Letzter Beitrag: 29.05.08, 00:12
  5. Error 438 occurred
    Von sunygirl im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 08.07.04, 10:07