Подтвердить что ты не робот

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>
4b9b3361

Ответ 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.