WCF 和肥皂 1.1

Posted

技术标签:

【中文标题】WCF 和肥皂 1.1【英文标题】:WCF and Soap 1.1 【发布时间】:2011-01-14 20:17:10 【问题描述】:

我正在尝试创建第 3 方应该使用的服务。 消费者与 SOAP 1.1 兼容,这就是我在服务器上使用 basicHttpBinding 的原因。当发出实际请求时,服务器预期的内容类型似乎出现了问题。使用 basicHttpBinding 我不明白为什么服务器仍然需要“application/soap+xml”,据我所知,只有 SOAP 1.2 才需要它。 我已经使用wireshark 来弄清楚这两个人在交流什么。请参阅下面的 tcp 流和设置。 任何帮助表示赞赏。

第三方应用请求

POST / HTTP/1.1

SOAP 动作: http://tempuri.org/ITestService/Hello

内容类型:文本/xml;字符集=utf-8

主机:shdesktop:8000

内容长度:297

期望:100-继续

连接:关闭

WCF 服务器响应

HTTP/1.1 415 无法处理 消息,因为内容类型 '文本/xml; charset=utf-8' 不是 预期类型'应用程序/soap+xml; charset=utf-8'。

内容长度:0

服务器:Microsoft-HTTPAPI/2.0

日期:格林威治标准时间 2010 年 2 月 9 日星期二 14:03:19

连接:关闭

服务配置

<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】:

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

【讨论】:

【参考方案2】:

basicHttpBinding 确实使用 SOAP 1.1 - 但在这种情况下,您将拥有 application/soap+xml 的内容类型。

由于您的客户正在发送text/xml - 他们是否有可能期待 REST 接口?这将由 WCF webHttpBinding 处理。

在MSDN WCF REST Developer Center 上阅读有关 WCF 中 REST 的更多信息,并查看 Pluralsight screencast series on WCF REST - 强烈推荐!

【讨论】:

哦,SOAP 1.1 会使用 'application/soap+xml' 吗?明天我会测试webHttpBinding,谢谢!我知道当我创建一个简单的 asmx 服务时它会起作用,如果它有什么不同的话。 @Silas: "旧式" ASP.NET webservices (ASMX) WCF basicHttpBinding 使用 SOAP 1.1 - 所以应该没问题,真的。您需要检查您的客户端是否正在向您发送 SOAP 请求,或者只是尝试将 XML 发布到您的 URL 我调用的是 http:// 而我需要调用 http:///TestService。我犯的愚蠢错误。感谢所有的帮助!【参考方案3】:

通常当我们在包含文本的网络服务中收到消息/错误时:

content type 'text/xml'

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

【讨论】:

以上是关于WCF 和肥皂 1.1的主要内容,如果未能解决你的问题,请参考以下文章

WCF 和肥皂 1.1

在“手动”发送肥皂消息时,我收到 WCF 的 AddressingNone 错误

HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?

WCF 服务客户端:定制的肥皂信封未在线发送

如何在 wcf 中添加自定义肥皂标题?

休息与肥皂有啥区别[重复]