没有SOAPAction头的WCF Web服务
如何在WCF中实现Web服务,使其不需要SOAPAction头出现在请求中,并因此使用消息体根元素名称来调用该调用?默认情况下,BasicHttpBinding需要SOAPAction。没有SOAPAction头的WCF Web服务
我需要这为用户提供不使用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' 操作。谢谢!
这不是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(可能是IDispatchMessageInspector
或IDispatchOperationSelector
)中有更详细的解释,但该请求甚至可能不会那么远,因为该消息真的不是一个有效的SOAP请求。
您可以按照this sample构建自定义行为调度基于消息体的根元素的SOAP消息来操作。
'......这些堆栈的客户端可能会使用空的或任意的HTTP SoapAction头发送消息......'我认为空头是好的,问题是头根本就没有。 –
这是因为客户端是为*的.asmx ASP.Net Web服务实现的,它从来没有使用SOAPAction头。但现在我认为试图说服客户端应用程序开发人员更新客户端并使其服从标准更有意义。 – nightwatch
问题在于WCF仍然需要用于SOAP 1.2调用的SOAPAction头,这与标准不兼容。 – gbjbaanb