WCF и пользовательский текстовый кодировка - грязный бизнес
-
27-10-2019 - |
Вопрос
У меня здесь действительно странная проблема 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 по умолчанию) работал.
Не спрашивайте меня, почему .... это просто факты, которые я нашел ...