【问题标题】:WCF and Soap 1.1WCF 和肥皂 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>

【问题讨论】:

    标签: c# .net wcf web-services soap


    【解决方案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 响应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        • 2020-06-11
        • 2011-03-22
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多