带有Soap 1.2的.Net WCF服务,无寻址。如何强制从不同的头节点读取SoapAction

带有Soap 1.2的.Net WCF服务,无寻址。如何强制从不同的头节点读取SoapAction,.net,wcf-binding,soapserver,.net,Wcf Binding,Soapserver,我们正在与.NET合作,第三方要求我们使用SOAP 1.2公开WCF端点,而不进行寻址。 但是,他们指出这是一个自定义实现,他们在特定的Soap头XML元素中发送Soap操作,而不是在规范所指示的内容类型中。 我一直试图通过使用自定义绑定、端点行为、IDispatchOperationSelector在接收时操纵请求,但没有任何效果。在进入AfterReceiveRequest(IDispatchMessageInspector)或SelectOperation(IDispatchOperati

我们正在与.NET合作,第三方要求我们使用SOAP 1.2公开WCF端点,而不进行寻址。 但是,他们指出这是一个自定义实现,他们在特定的Soap头XML元素中发送Soap操作,而不是在规范所指示的内容类型中。 我一直试图通过使用自定义绑定、端点行为、IDispatchOperationSelector在接收时操纵请求,但没有任何效果。在进入AfterReceiveRequest(IDispatchMessageInspector)或SelectOperation(IDispatchOperations Selector)之前,我始终会收到错误“由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有操作“”的消息。”。 我不想构建完整的托管过程,我想知道是否有一种方法可以从不同的节点获取Soap操作,并将其作为寻址Soap头或内容类型注入,然后再尝试验证该操作是否存在于契约中。。。 如果这是不够的信息,请让我知道。 先谢谢你


更新

经过一些搜索和阅读,我找到了一个解决方法:

  • 在WCF contracts类中添加了一个通用的未动作合约
    [System.ServiceModel.OperationContractAttribute(Action=“*”,ReplyAction=“*”)]
    并将名称添加到 服务
  • 添加了一个附加的IEndpointBehavior类 ApplyDispatchBehavior,将OperationSelector注册到新的 我是选举人
  • 添加了IDispatchOperationSelector 它从自定义标头获取操作并将其作为 操作名称
  • 在WCF服务类实现中添加了 未操作的操作,在发生异常时将异常作为回退 发送了错误的操作
  • 遇到一些问题,如操作名称不能包含“:”但这很容易与第三方讨论更改


    希望有帮助。

    客户端和服务器端必须具有相同的绑定和契约,否则会出现此问题。嗨,丁鹏。为了使服务器(我的端)与客户端保持一致,我需要使用.net WCF服务(我的端)从soap头中的自定义节点读取soap操作:2021-05-04T12:56:32+00:00 2WZ79K301BHGMJ4VKxtegzm SomeAction,或者在.net系统尝试与协定中的操作关联之前,能够获取此操作并将其作为内容类型头的一部分注入。