WebService Request mit Umlaute/Sonderzeichen -> Bad Request

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

ich habe einen simplen Web Service:
POST /bla/blu.asmx HTTP/1.1
Host: http://www.tutorials.de
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "www.tutorials.de/webservice//test"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<test xmlns="http://www.tutorials.de/webservice/">
<auth>
<ID>int</ID>
<Value>string</Value>
</auth>
</test>
</soap:Body>
</soap:Envelope>

Wenn ich nun mit JAVA auf diesen Web Service poste, funktioniert alles, solange ich in VALUE keine Sonderzeichen (ä, ö, ü, èéà) sende.... mach ich das, dann erhalte ich einen Bad Request!

Was genau muss ich am .NET Web-Service ändern, damit er in VALUE effektiv die Sonderzeichen akzeptiert?Oder sonst irgendwo etwas zusätzlich angeben?

Ich könnte natürlich alle Sonderzeichen in JAVA maskieren, und dann im .NET Web Service wieder dekodieren, aber das Problem ist, dass der Web Service bei uns läuft und die Java-Datei beim Kunden und wir diese nicht so einfach ersetzen können?

Dann noch dies:
Wie ist die korrekte Vorgehensweise beim Versenden von Sonderzeichen via Web-Service?


cheerioh & thx
SiS
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
Hi.

Wie bzw. womit erstellst du denn die Anfragen an den Web Service auf der Java Seite?

Wenn du die Daten korrekt als UTF-8 kodierst, muß das funktionieren.

Gruß
 

StehtimSchilf

Erfahrenes Mitglied
hi

danke, richtig, wenn ich auf der Clientseite (Java), die
Code:
byte[] bytes = content.getBytes("UTF-8")
verwende, dann funktionierts. Nur leider habe ich dies beim ersten Release vergessen :-( . Drum schwirren eben noch Clients rum, in deren Code keine UTF-8 Kodierung vorgenommen wurde. Diese zu aktualisieren ist nicht so einfach. Daher meine Idee, evtl. am WebService was zu schrauben, denn dieser läuft auf unseren Servern im Hause.

Danke & Gruess
SiS
 

deepthroat

Erfahrenes Mitglied
hi

danke, richtig, wenn ich auf der Clientseite (Java), die
Code:
byte[] bytes = content.getBytes("UTF-8")
verwende, dann funktionierts. Nur leider habe ich dies beim ersten Release vergessen :-( . Drum schwirren eben noch Clients rum, in deren Code keine UTF-8 Kodierung vorgenommen wurde. Diese zu aktualisieren ist nicht so einfach. Daher meine Idee, evtl. am WebService was zu schrauben, denn dieser läuft auf unseren Servern im Hause.
Das Problem ist das du sowohl im HTTP Header als auch im XML Dokument als charset bzw. encoding UTF-8 angibst, aber dann kein UTF-8 sendest.

Hast du denn den Java Webservice Client per Hand programmiert?! :suspekt:

Du könntest evtl. einen ASHX Handler schreiben, den du dann vor deinen ASMX Webservice schaltest. In dem HttpRequest schaust du dir das XML Dokument an ob es valides UTF-8 ist. Wenn nicht müßtest du es umkodieren und als Proxy eine Anfrage an den Webservice stellen. Wenn alles OK ist könntest du die Anfrage einfach weiterleiten.

Gruß
 

StehtimSchilf

Erfahrenes Mitglied
Hey das mit dem ASHX-Handler ist noch ne super Idee - nicht nur für dieses Problem, sondern für künftige (die werden schon kommen ;) ) :)

Danke!

Und ja, das mit dem Java Web Service war ne händische Arbeit vor langer Zeit...

Aber am einfachsten ist es, wenn ich einfach jedem der mit einer alten Client-Version daherkommt ne aktuelle Version verpasse - nur müssen sich diese halt zuerst bei mir beschweren!

Hey Danke vielmals!

cheerioh
SiS
 

Neue Beiträge