2014-03-04 13 views
5

Ich habe einen C# WCF-Dienst ausgeführt, der Nachrichten in ISO-8859-1 akzeptieren muss. Alles funktioniert einwandfrei, bis jemand eine Nachricht mit einem Sonderzeichen wie ä oder ö sendet.WCF-Dienst schlägt auf Sonderzeichen fehl

Wenn die Zeichen codiert werden (ä zu \344 oder ä) alles funktioniert gut, aber der Absender besteht darauf, dass, wenn die Nachricht anders ist ISO-8859-1, sollte es für die Flucht nicht nötig sein.

Genauer gesagt funktioniert das (vereinfachtes Beispiel):

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    a 
    </soap:Body> 
</soap:Envelope> 

(aber natürlich eine andere Ausnahme aufgrund ungültiger Syntax führt, aber der Transport selbst ist in Ordnung).

funktioniert das nicht:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    ä 
    </soap:Body> 
</soap:Envelope> 

Und ein paar kryptische Fehlermeldung führt, die zu nichts führen:

<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, ...</ExceptionType> 
<Message>The I/O operation has been aborted because of either a thread exit or an application request</Message> 
... 
<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, ...</ExceptionType> 
<Message>An operation was attempted on a nonexistent network connection</Message> 

Ich habe versucht, den Dienst mit einem leeren App.config laufen und das Problem besteht weiterhin, daher bin ich mir ziemlich sicher, dass das Problem nicht in der Art und Weise liegt, wie ich den Dienst erstellt habe, sondern darin, wie WCF die Nachrichten verarbeitet. Das Ändern der Codierung in UTF-8 hilft auch nicht.

Irgendeine Idee, warum ein einzelner Umlaut den Dienst so katastrophal vermasselt? XML soll andere Kodierungen als ASCII unterstützen, also was ist das hier? Gibt es irgendwelche Änderungen, die ich tun könnte, oder wenn alle Hoffnung verloren ist, wie könnte ich den Absender überzeugen, ihre Sonderzeichen zu kodieren?

+0

Ähnliche Probleme hier: http://stackoverflow.com/questions/5369462/wcf-and-custom-text-encoding-messy-business Könnte helfen. – danish

Antwort

0

Das Problem war nicht das, was ich dachte, dass es war.

Die Daten der Kunde hat uns war die richtige XML-Deklaration fehlt: richtig

<?xml version="1.1" encoding="ISO-8859-1"?> 

Damit war der Service.

Aber die Ausnahmen, die ich bekam, wurden von dem Programm verursacht, mit dem wir die Verbindung selbst getestet haben. Das Programm war WebServiceStudio, und es scheiterte vollständig, als wir versuchten, spezielle Zeichen (speziell ä) durch es zu senden: der Körper der Nachricht fehlte vollständig, als es mit WireShark überprüft wurde.

So dachten wir zunächst, dass der Kunde das gleiche Problem wie wir hatte, aber als wir bemerkten, dass unsere Tests fehlschlugen, wurde der wahre Grund schnell gefunden, nämlich die fehlende XML-Deklaration aus der SOAP-Nachricht.