2010-02-09 2 views
25

Я пытаюсь создать услугу, которую, надеюсь, будет потреблять третье лицо.
Потребитель совместим с SOAP 1.1, поэтому я использую basicHttpBinding для сервера. Когда выполняется фактический запрос, что-то кажется неправильным в отношении типов контента, ожидаемых сервером. Использование basicHttpBinding Я не понимаю, почему сервер все еще ожидает «application/soap + xml», который, насколько мне известно, требуется только SOAP 1.2.

Я использовал wirehark, чтобы выяснить, что именно общались эти два. См. Поток tcp и настройки ниже.

Любая помощь приветствуется.

WCF и Soap 1.1

приложение третья сторона запрос

POST/HTTP/1.1

SOAPAction: http://tempuri.org/ITestService/Hello

Content-Type: Текст/XML; кодировка = UTF-8

Ведущий: shdesktop: 8000

Content-Length: 297

Ожидать: 100-продолжать

соединения: Закрыть

ответ WCF сервера

HTTP/1.1 415 Не удается обработать сообщение , поскольку тип содержимого 'text/xml; charset = utf-8 'не было ожидаемым типом' application/soap + xml; charset = utf-8 '.

Content-Length: 0

Сервер: Microsoft-HTTPAPI/2,0

Дата: Вт, 9 февраля 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> 

ответ

19

basicHttpBinding использует SOAP 1.1 - но в этом случае у вас будет тип контента application/soap+xml.

Поскольку ваш клиент отправляет text/xml - есть ли вероятность, что они ожидают интерфейс REST? Это будет обрабатываться WCF webHttpBinding.

Узнайте больше о REST в WCF на MSDN WCF REST Developer Center и проверьте Pluralsight screencast series on WCF REST - очень рекомендуется!

+0

oh, SOAP 1.1 будет использовать «приложение/мыло + xml»? Я буду тестировать webHttpBinding завтра, спасибо! Я знаю, что это работает, когда я создаю простой asmx-сервис, если он имеет какое-то значение. –

+2

@Silas: «старые» веб-службы ASP.NET (ASMX) ** и ** WCF basicHttpBinding используют SOAP 1.1 - так что все должно быть в порядке. Вам нужно проверить, отправляет ли ваш клиент SOAP-запрос или просто пытается отправить XML на ваш URL-адрес. –

+0

Я звонил http: // , вместо этого мне нужно было позвонить по адресу http: // /TestService. Глупая ошибка. Спасибо за помощь! –

6

Обычно, когда мы получаем сообщение/сообщение об ошибке в веб-сервиса, который включает в себя текст:

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, выставил ее, как мыло 1.1 на этот раз.

Смежные вопросы