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

问题描述

我们正在与 .NET 合作,该第三方要求我们使用 SOAP 1.2 公开 WCF 端点,而无需寻址。 然而,他们指出这是一个自定义实现,他们在特定的soap 标头XML 元素中发送Soap Action,而不是在规范指示的内容类型中发送。 我一直在尝试通过使用自定义绑定、端点行为、IdispatchOperationSelector 来操纵接收请求,但没有任何效果。我总是收到错误消息“由于 Endpointdispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action '' 的消息。”在进入 AfterReceiveRequest (IdispatchMessageInspector) 或 SelectOperation (IdispatchOperationSelector) 之前。 我不想构建完整的托管过程,并想知道是否有办法从不同的节点获取 Soap 操作并将其作为寻址肥皂头或内容类型注入,然后再尝试验证该操作存在于合同中... 如果这还不够,请告诉我。 提前致谢。


更新

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

  1. 在 WCF 合同类中添加了通用的未操作合同 [System.ServiceModel.OperationContractAttribute(Action = "*",ReplyAction = "*")] 并将名称添加到 服务。
  2. 添加一个额外的 IEndpointBehavior 类 ApplydispatchBehavior 将 OperationSelector 注册到新的 IdispatchOperationSelector。
  3. 添加了 IdispatchOperationSelector 它从自定义标头中获取操作并将其作为 操作名称
  4. 在 WCF 服务类实现中添加了 UnActioned 操作,抛出异常作为后备,以防万一 发送了错误的操作。

遇到一些问题,例如操作名称不能包含“:”,但很容易与第 3 方讨论更改。

希望有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)