WCF и пользовательский текстовый кодировка - грязный бизнес

StackOverflow https://stackoverflow.com/questions/5369462

Вопрос

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

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

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

Hünibach

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

Hünibach

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

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

Исключение: System.ServiceModel.security.messageSecurityException
HTTP -запрос был запрещен с помощью схемы аутентификации клиента «Basic».

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

ОК-Вернемся к ISO-8859-1, и я просто попытался интерпретировать полезную нагрузку ответа как UTF-8-Опять не повезло :-( Пробовал с UTF-16, UTF-32, UTF-7 Evel, Unicode, Bigendianunicode-All но безрезультатно.

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top