WCF и мыло 1.1
Я пытаюсь создать сервис, который, как мы надеемся, поглотит третье лицо.
Потребитель совместим с SOAP 1.1, поэтому я использую basicHttpBinding для сервера. Когда выполняется фактический запрос, что-то кажется неправильным в отношении типов контента, ожидаемых сервером. Использование basicHttpBinding Я не понимаю, почему сервер все еще ожидает "application/soap + xml", который, насколько мне известно, требуется только SOAP 1.2.
Я использовал wirehark, чтобы точно выяснить, о чем эти два говорили. См. Поток tcp и настройки ниже.
Любая помощь приветствуется.
Запрос стороннего приложения
POST/HTTP/1.1
SOAPAction: http://tempuri.org/ITestService/Hello
Content-Type: text/xml; кодировка = UTF-8
Хост: shdesktop: 8000
Content-Length: 297
Ожидайте: 100-continue
Соединение: Закрыть
Ответ сервера WCF
HTTP/1.1 415 Не удается обработать потому что тип содержимого "Текст/XML; charset = utf-8 'не был ожидаемый тип 'application/soap + xml; кодировка = UTF-8'.
Content-Length: 0
Сервер: Microsoft-HTTPAPI/2.0
Дата: вт, 09 фев. 2010 14:03:19 GMT
Соединение: закрыть
Конфигурация службы
<system.serviceModel>
<services>
<service behaviorConfiguration="behTestService" name="ConsoleApplication1.TestService">
<endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="TestService" binding="basicHttpBinding"
contract="ConsoleApplication1.ITestService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behTestService">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Ответы
Ответ 1
basicHttpBinding
использует SOAP 1.1 - но в этом случае у вас будет тип содержимого application/soap+xml
.
Поскольку ваш клиент отправляет text/xml
- есть ли вероятность, что они ожидают интерфейс REST? Это будет обрабатываться WCF webHttpBinding
.
Подробнее о REST в WCF в Центр разработчиков MSDN WCF REST и проверьте Pluralsight серия screencast на WCF REST - настоятельно рекомендуется!
Ответ 2
Обычно, когда мы получаем сообщение/ошибку в веб-службе, которая включает в себя текст:
content type 'text/xml'
Это означает, что веб-сервер вернул страницу с ошибкой вместо ожидаемого ответа xml.
Ответ 3
У меня была одна и та же проблема - в определении говорилось, что это было мыло 1.2, но ожидало 1.1, поскольку тип контента был другим.
Я обнаружил, что если я настроил конфигурацию своего сервера:
...
<endpoint address="" .../>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/services/fooService" />
</baseAddresses>
</host>
...
To:
...
<endpoint address="fooService" .../>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/services" />
</baseAddresses>
</host>
...
В этот раз wsdl выставил его как Soap 1.1.