没有SOAPAction标头的WCF Web服务

时间:2011-11-02 13:04:46

标签: .net wcf web-services soap

如何在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'操作。谢谢!

2 个答案:

答案 0 :(得分:5)

这不是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请求。< / p>

答案 1 :(得分:3)

您可以按照this sample构建自定义行为,以便根据邮件正文的根元素将SOAP消息调度到操作。