没有SOAPAction标头的WCF Web服务

nig*_*tch 4 .net wcf soap web-services

如何在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>
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*l C 5

这不是BasicHttpBinding的问题,而是遵循SOAP 1.1标准的问题,该标准说:

An HTTP client MUST use this header field when issuing a SOAP HTTP Request.
Run Code Online (Sandbox Code Playgroud)

因此,您要处理的客户不符合2000年以来的标准。您可以通过实现WCF的可扩展性点之一来解决此问题,MSDN中对此进行了详细说明文章用自定义行为扩展WCF,可能是IDispatchMessageInspectorIDispatchOperationSelector,但是由于消息实际上并不是有效的SOAP请求,因此该请求甚至可能没有达到要求。

  • 问题是WCF仍需要用于SOAP 1.2调用的SOAPAction标头,这与标准不兼容。 (3认同)