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 StreamReaders-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.

Nur ein technischer Punkt, aber verschlüsselt ist nicht das richtige Adjektiv. UTF-8 ist nur ein Zeichensatz, Sat-wäre genauer.
Natürlich hast du Recht, sorry für diese Verwechslung 🙂

InformationsquelleAutor Carsten | 2012-12-04

Schreibe einen Kommentar