WCF и нестандартное кодирование текста - грязное дело

У меня здесь действительно странная проблема с WCF...

Мы подключаемся к дрянному стороннему веб-сервису; это даже было кошмаром, нам пришлось создать собственную привязку WCF, так как эти парни решили использовать в качестве кодировки текста "ISO-8859-1" (вместо UTF-8, как все остальные в сети), и другие настройки тоже были грязными - и нигде не документированы, конечно...

Некоторое время он работал нормально, но внезапно некоторые наши данные возвращаются в искаженном виде. Мы ожидаем вернуть названия мест, и, будучи в Швейцарии, в некоторых из них есть немецкие умлауты. Но за последние два или три месяца мы внезапно вернулись

Hünibach

вместо правильного

Hünibach

Таким образом, ü (u умлаут) искалечено.

Нет проблем, я решил, что они наконец-то переключились на UTF-8, и я изменил свое пользовательское связывание, чтобы использовать UTF-8 в качестве кодировщика текста вместо ISO-8859-1 - но не повезло - нет, я получаю:

ИСКЛЮЧЕНИЕ: System.ServiceModel.Security.MessageSecurityException
HTTP-запрос был запрещен с помощью схемы аутентификации клиента "Basic".

Что за????? Сервис защищен именем пользователя / паролем, которые мы передаем, используя ClientCredentials WCF. Кажется, что изменение кодировки текста как-то портит учетные данные!?!?! Weird.....

Хорошо - вернемся к ISO-8859-1, и я просто попытался интерпретировать полезную нагрузку ответа как UTF-8 - опять не повезло:-(Попробовал с UTF-16, даже UTF-32, UTF-7, Unicode, BigEndianUnicode - все но безрезультатно.

Так как же я могу вернуть себе надлежащие умлауты и все еще быть в состоянии вызвать этот кровавый сервис... прекрасно работает в SoapUI, кстати.....

Есть идеи?? Я отчаянно цепляюсь за любую соломинку, которую вы можете бросить мне!

2 ответа

Решение

Попробуйте проверить данные, которые вы получаете, и посмотреть, какие числовые коды они используют для их представления. Умлаут - один из тех символов 8859-1, который делит код с другими символами.

Смотрите второй пункт в - http://en.wikipedia.org/wiki/%C3%9C

На самом деле, я наконец понял, в чем проблема.

По какой-то причине смена образца CustomTextEncoder (предоставленный Microsoft в примерах WCF & WF) использовать UTF-8 вместо ISO-8859-1 не работает.

С другой стороны, вырываю пользовательский кодировщик текста из моей пользовательской привязки и просто использую стандартную TextMessageEncoder что WCF предоставляет с самого начала (который по умолчанию использует UTF-8) , сработало.

Не спрашивайте меня, почему.... это просто факты, которые я нашел.....

Другие вопросы по тегам