WCF and Soap 1.1

26

我正在尝试创建一个服务,希望第三方应用程序可以使用。
消费者与SOAP 1.1兼容,这就是我在服务器上使用basicHttpBinding的原因。当实际请求发生时,似乎与服务器期望的内容类型有关的问题出现了。使用basicHttpBinding,我不明白为什么服务器仍然期望“application/soap+xml”,据我所知,这只是SOAP 1.2所需的。

我已经使用wireshark确定了它们之间的通信内容,查看下面的tcp流和设置。

感谢任何帮助。

第三方应用程序请求

POST / HTTP/1.1

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

Content-Type: text/xml; charset=utf-8

Host: shdesktop:8000

Content-Length: 297

Expect: 100-continue

Connection: Close

WCF服务器响应

HTTP/1.1 415 无法处理此消息,因为内容类型“text/xml; charset=utf-8”不是预期的类型“application/soap+xml; charset=utf-8”。

Content-Length: 0

Server: Microsoft-HTTPAPI/2.0

Date: Tue, 09 Feb 2010 14:03:19 GMT

Connection: close

服务配置

<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个回答

20
basicHttpBinding 使用的是 SOAP 1.1 - 但在这种情况下,内容类型应该为 application/soap+xml
由于客户端发送的是 text/xml - 是否有可能他们预期的是 REST 接口?这可以通过 WCF 的 webHttpBinding 来处理。
MSDN WCF REST Developer Center 上阅读更多关于 WCF 中 REST 的内容,并查看 Pluralsight 的WCF REST 录像系列 - 强烈推荐!

哦,SOAP 1.1会使用“application/soap+xml”吗?我明天会测试webHttpBinding,谢谢!我知道当我创建一个简单的asmx服务时它是有效的,如果有任何区别的话。 - Silas Hansen
3
@Silas:旧版 ASP.NET webservices (ASMX) WCF basicHttpBinding 使用 SOAP 1.1 - 所以这应该没问题。您需要检查您的客户端是否向您发送了一个 SOAP 请求,或者只是尝试将 XML 发送到您的 URL。 - marc_s
我本应该调用http://<hostname>/TestService,但我却调用了http://<hostname>。我的错误真是太蠢了。还是谢谢大家的帮助! - Silas Hansen

7
通常在Web服务中,当我们收到包含以下文本的消息/错误时:

content type 'text/xml'

这意味着网页服务器返回了错误页面,而不是预期的 XML 响应。

3

我遇到了完全相同的问题 - 定义说它是SOAP 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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接