【问题标题】:WCF web service without SOAPAction header没有 SOAPAction 标头的 WCF Web 服务
【发布时间】:2011-11-02 13:04:46
【问题描述】:

如何在 WCF 中实现 Web 服务,使其不需要 SOAPAction 标头出现在请求中,从而使用消息正文根元素名称调度调用?默认情况下,BasicHttpBinding 需要 SOAPAction。

我需要它来提供与不使用 SOAPActions 的客户端的兼容性。 这是我的 SOAP 消息:

<?xml version='1.0' encoding='UTF-8'?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<messageDeliveryReport xmlns="http://bogus/ns"><status>D</status><systemName>cc</systemName></messageDeliveryReport>
</env:Body></env:Envelope>

我希望它调用“messageDeliveryReport”操作。谢谢!

【问题讨论】:

    标签: .net wcf web-services soap


    【解决方案1】:

    这不是 BasicHttpBinding 的问题,而是遵守the SOAP 1.1 standard 的问题,上面写着:

    An HTTP client MUST use this header field when issuing a SOAP HTTP Request.
    

    因此,您要处理的是一个不符合自 2000 年以来就存在的标准的客户端。您可以通过实现 WCF 的一个可扩展点来解决此问题,该扩展点将得到更详细的解释在 MSDN 文章 Extending WCF with Custom Behaviors 中,可能是 IDispatchMessageInspectorIDispatchOperationSelector,但该请求甚至可能无法实现,因为该消息实际上不是一个有效的 SOAP 请求。

    【讨论】:

    • 这是因为客户端是为 *.asmx ASP.Net Web 服务实现的,它从未使用 SOAPAction 标头。但现在我认为尝试说服客户端应用程序开发人员更新客户端并使其遵守标准更有意义。
    • 问题是 WCF 仍然需要 SOAPAction 头进行 SOAP 1.2 调用,这不符合标准。
    【解决方案2】:

    您可以关注this sample 来构建自定义行为,以根据消息体的根元素将 SOAP 消息发送到操作。

    【讨论】:

    • ...the client side of these stacks might send messages with an empty or arbitrary HTTP SoapAction header... 我认为空标题是可以的,问题是标题根本不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多