Я пишу службу WCF, работающую на IIS, и у меня есть клиент, чей клиент может использовать только SOAP 1.1.
Помимо прочего, им нужен тип контента "application / soap + xml; charset = utf-8". Мой сервис WCF отправляет "text / xml; charset = utf-8".
Клиент, который пытается написать клиент, отправил мне сообщение об ошибке:
HTTP 415: невозможно обработать сообщение, так как тип содержимого
«Текст / XML; charset = utf-8 'не был ожидаемым типом
«Приложения / мыло + XML; кодировка = UTF-8
Просматривая сеть, я нашел несколько страниц блога, таких как: Ошибка WCF - запрос не выполнен с HTTP-статусом 415 .
Что заставило меня подумать, что переключение с wsHttpBinding на basicHttpBinding исправит это. Поэтому я изменил привязку в web.config и изменил свой собственный тестовый клиент, чтобы явно создать конечную точку с BasicHttpBinding. И все это работало нормально в моих собственных тестах (как запуск службы в Dev Server Visual Studio, так и запуск ее в IIS7 на моей собственной машине, а также запуск в IIS6 на одном из наших тестовых серверов.)
Но прежде чем я поднял голову у клиента и попросил его посмотреть, сработают ли мои изменения, я запустил Fiddler, чтобы подслушать реальный трафик.
И, по словам Фиддлера, я все еще отправляю "text / xml; charset = utf-8".
Итак, как мне это исправить?
<system.serviceModel>
<services>
<service behaviorConfiguration="myBehavior" name="myName">
<endpoint
address=""
binding="basicHttpBinding"
behaviorConfiguration="flatWsdlFileEndpointBehavior"
bindingNamespace="http://myNamespace"
contract="myContract">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="myBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="flatWsdlFileEndpointBehavior">
<wsdlExtensions location="myUrl" singleFile="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<extensions>
<behaviorExtensions>
<add name="wsdlExtensions" type="WCFExtras.Wsdl.WsdlExtensionsConfig, WCFExtras, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>