如何在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'操作。谢谢!
答案 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中,可能是IDispatchMessageInspector
或IDispatchOperationSelector
,但请求可能甚至没有这么做,因为消息确实不是一个有效的SOAP请求。< / p>
答案 1 :(得分:3)
您可以按照this sample构建自定义行为,以便根据邮件正文的根元素将SOAP消息调度到操作。