WCF и мыло 1.1 - PullRequest
       37

WCF и мыло 1.1

25 голосов
/ 09 февраля 2010

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

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

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

Запрос стороннего приложения

POST / HTTP / 1.1

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

Content-Type: text / xml; кодировка = UTF-8

Хост: shdesktop: 8000

Длина содержимого: 297

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

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

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

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

Длина содержимого: 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>

Ответы [ 3 ]

18 голосов
/ 09 февраля 2010

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

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

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

6 голосов
/ 09 февраля 2010

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

content type 'text/xml'

Это означает, что веб-сервер возвратил страницу с ошибкой вместо ожидаемого xml-ответа.

3 голосов
/ 24 февраля 2011

У меня была точно такая же проблема - в определении говорилось, что это было мыло 1.2, но ожидал 1.1, так как тип контента был другим.

Я обнаружил, что если я настроил свою конфигурацию сервера с:

...
<endpoint address="" .../>
    <host>
        <baseAddresses>
            <add baseAddress="http://localhost:8001/services/fooService" />
        </baseAddresses>
    </host>
...

Кому:

...
<endpoint address="fooService" .../>
    <host>
        <baseAddresses>
            <add baseAddress="http://localhost:8001/services" />
        </baseAddresses>
    </host>
...

На этот раз wsdl выставил его как Soap 1.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...