Почему WCF не поддерживает другие кодировки, кроме UTF-8 и UTF-16 по умолчанию? - PullRequest
2 голосов
/ 20 января 2012

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

HTTP / 1.1 415 Не удалось обработать сообщение, поскольку тип содержимого 'text / xml; charset = iso-8859-1' не был ожидаемым типом 'text / xml; кодировка = UTF-8' .

По-видимому, WCF поддерживает только UTF-8 и UTF-16 с прямым порядком байтов, согласно http://msdn.microsoft.com/en-us/library/ms751486(v=VS.90).aspx. Проблема также обсуждается в этих вопросах по SO:

Хотя я согласен с тем, что Юникод предпочтительнее, я не в состоянии заставить нашего клиента сменить клиента, поэтому мне придется исправить наш сервис.

Меня беспокоит, что мне нужно вложить> 150 строк кода, написанного каким-то автором MSDN, в мой проект - я не могу поддерживать этот код или брать на себя ответственность за него. Я также потратил довольно много времени на поиск решений в Google и попытался понять их, что, по моему мнению, является пустой тратой времени на то, что может быть обработано из коробки WCF.

Мой вопрос таков: есть ли у Microsoft веская причина для реализации WCF таким образом? Есть ли техническая причина, по которой SOAP не следует использовать ISO-8859-1? Мне кажется, это нарушает закон Постела, отвергая сообщения, которые действительно могут обрабатываться практически любым XML-анализатором.

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Очевидно, это разрешено в спецификации SOAP 1.2 , см. Раздел 4.2:

Привязка, если используется сериализация XML инфо-набора XML, МОЖЕТ получить мандат использовать определенную кодировку символов или набор кодировок.

В этом случае WCF решает поддерживать только UTF-8 и UTF-16, но не другие кодировки.

0 голосов
/ 09 октября 2013

Один из обходных путей - использовать службу «в старые времена», используя класс HttpWebRequest, как описано здесь . Вам придется иметь дело с чистым Xml, чтобы делать запросы и другие интересные вещи, но работает отлично!

...