Akzeptieren UTF-8-kodierte strings in ASP.NET WebService
Habe ich eine ASP.NET WebService, der wie folgt aussieht:
[WebMethod]
public static void DoSomethingWithStrings(string stringA, string stringB)
{
//and so on
}
Einer Drittanbieter-Anwendung sollte der Aufruf dieses webservice. Jedoch diese Anwendung codiert strings als UTF-8 und alle Umlaute ersetzt werden durch '??'. Ich kann die anrufen und die besonderen Zeichen, die formatiert sind gut:
<?xml version="1.0" encoding="utf-8" ?>
<!-- ... -->
<SoapCall>
<DoSomethingWithStrings>
<stringA>Ä - Ö - Ü</stringA>
<stringB>This is a test</stringB>
</DoSomethingWithStrings>
</SoapCall>
Diese erzeugt die folgende Ausgabe, wenn ich drucken Sie einfach die Zeichenfolgen, die in der webservice-Methode:
?? - ?? - ??
Dies ist ein test
Wie kann ich konfigurieren Sie den WebService zu akzeptieren UTF-8-kodierte strings?
Update
Fiddler sagt mir auch, dass der content-type charset aus dem http-request ist UTF-8.
Update 2
Ich versuchte, fügen Sie folgenden code zum global.asax
für debugging-Zwecke:
public void Application_BeginRequest(object sender, EventArgs e)
{
using (var reader = new System.IO.StreamReader(Request.InputStream))
{
string str = reader.ReadToEnd();
}
}
Dieser liest die eigentliche SOAP-Aufruf. Die StreamReader
s-Kodierung auf UTF-8 eingestellt. Der SOAP-Aufruf korrekt aussieht:
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<DoSomethingWithStrings xmlns="http://www.tempuri.org/">
<stringA>Ä - Ö - Ü</stringA>
<stringB>This is a test!</stringB>
</DoSomethingWithStrings>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
In der web.config
Datei die Globalisierung Einstellungen korrekt sind:
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="de-DE" uiCulture="de-DE" />
So sieht es aus wie etwas, das deserialisiert die SOAP-Nachricht nicht UTF-8, aber die ASCII-Kodierung.
Natürlich hast du Recht, sorry für diese Verwechslung 🙂
InformationsquelleAutor Carsten | 2012-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich stellt sich heraus, dass etwas ging falsch in der Annahme von HTTP-Nachrichten. Ich weiß wirklich nicht, was bearbeitet den HTTP-Request, aber ich fand eine Abhilfe für dieses. Obwohl Fiddler zeigte mir die richtige content-type (
text/xml; charset=utf-8
) in meinemApplication_BeginRequest
dieRequest.RequestContext.HttpContext.Request.ContentType
war nurtext/xml
, die dazu führen, dass ein fallback auf default (ASCII) - Codierung in der ASMX-serializer. Ich habe folgenden code Hinzugefügt, um dieApplication_BeginRequest
handler und alles funktioniert jetzt.Vielen Dank für Ihre Hilfe!
Genau der Grund, warum ich die Frage gestellt habe... ich habe keine Ahnung, warum der SOAP-Nachricht (die im Allgemeinen eine XML-Nachricht) bekommen, die nicht analysiert, wie eine XML-Datei. Aber... vielen Dank für Eure Hilfe 🙂
InformationsquelleAutor Carsten
Versuchen Sie dies:-
HINWEIS:-
InformationsquelleAutor Rahul Tripathi
Den SOAP-Aufruf decodiert wird, als ASCII-irgendwo - jeder der Umlaute 2 bytes mit der hohen bit gesetzt, welches sich in
??
wenn die dekodierten ASCII.So, ist so etwas wie dies geschieht:
Überprüfen, geschieht dies für Sie sicher, Sie sollten vergleichen Sie
stringA == "Ä - Ö - Ü"
eher als Ausdruck irgendwo.Ich denke, Sie könnten beginnen, indem Sie ein Projekt-weites suchen Sie nach "ASCII" und dann von dort aus arbeiten, wenn Sie nichts finden.
Könnte man auch versuchen,
Unter der
<system.web>
tag inWeb.config
Datei.InformationsquelleAutor Esailija
Ich hatte das gleiche problem. Asmx-web-service konvertiert meine UTF-8 zu ASCII-oder, besser zu sagen ??????. Dein post hat mir sehr geholfen.
Die Lösung, die ich fand war die änderung der version des SOAP-Protokoll von 1.1 auf 1.2
Ich meine:
hatte das problem. Aber wenn ich änderte meine Anfrage zu SOAP 1.2:
Das Problem war gelöst.
InformationsquelleAutor Sergey