Я пытаюсь назвать веб-сервис с помощью WCF, который использует следующее кодирование:
<?xml version="1.0" encoding="ISO-8859-1" ?>
Я не могу изменить кодирование для этого веб-сервиса. Я генерировал прокси wcf и когда я пытаюсь назвать прокси, я получаю следующую ошибку:
FailedSystem. ServiceModel. ProtocolException: тип контента text/xml; charset=ISO-8859-1 ответного сообщения не соответствует типу контента привязки (text/xml; charset=utf-8). При использовании пользовательского кодера, уверены, что метод IsContentTypeSupported реализован правильно.
У кого-либо есть какая-либо идея, как я называю веб-сервис, который не является UTF-8, использующим wcf?
К сожалению, вы не можете сделать это из коробки в WCF.
Я столкнулся с той же проблемой и придумал настраиваемую привязку (либо в конфигурации или в коде), который вы можете использовать. Он основан на HTTP-транспорте, и если это вам поможет, я могу опубликовать здесь настраиваемую конфигурацию или отправить вам ссылку на код C # для привязки.
Эта страница MSDN здесь показывает, как создать «CustomTextEncoder», который может поддерживать кодировки более чем utf-8, utf-16 и unicode. Он включает в себя полный пример исходного кода и был очень полезен для меня, чтобы начать работу.
Эта запись в блоге здесь показывает некоторые дополнительные моменты, которые следует учитывать при попытке заставить этот пользовательский кодировщик текста работать должным образом.
Надеюсь, что это поможет.
Марк
ОБНОВЛЕНИЕ:
На основе упомянутого выше примера Microsoft для CustomTextEncoder вы можете легко создать настраиваемую привязку с кодировкой текстового сообщения ISO-8859-1 - просто используйте этот фрагмент конфигурации (при условии, что вы загрузили, скомпилировали и ссылались на этот образец Microsoft ):
<system.serviceModel>
<extensions>
<bindingElementExtensions>
<add name="customTextMessageEncoding"
type="Microsoft.ServiceModel.Samples.CustomTextMessageEncodingElement,
Microsoft.ServiceModel.Samples.CustomTextEncoder"/>
</bindingElementExtensions>
</extensions>
<bindings>
<customBinding>
<binding name="ISO8859Binding" >
<customTextMessageEncoding encoding="ISO-8859-1" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint name="Test"
address="......."
binding="customBinding"
bindingConfiguration="ISO8859Binding"
contract="IYourContract" />
</client>
</system.serviceModel>
Вы можете найти этот код, а также привязку ISO88591Binding
, которая в основном превращает всю эту конфигурацию в код в моем каталоге Skydrive Кодировка WCF ISO 8859-1 . Однако будьте осторожны - это основано на моих требованиях, которые у меня были в то время, например, мой сервис, который мне нужно было поговорить с требуемым https, а также некоторые другие немного странные настройки, так что вам может потребоваться настроить их или сделать их настраиваемыми в конфигурации, если это необходимо. Этот проект ISO88591Binding также содержит netHttpBinding, который снова является образцом, предоставленным Microsoft, который я использовал, чтобы научиться писать свою собственную привязку в коде.
Написание настраиваемой привязки в WCF определенно возможно, но не совсем для слабонервный ....