为什么我们在使用 netmessagebinding 元素时需要操作合同上的 action="*" 属性

why we need action="*" attribute on operation contract when using netmessagebinding element

我们正在发布消息,即正文内容类型为 "string" 的代理消息对象到主题上的 window 服务器服务总线,并使用 WCF 服务从 topic/subscription 拉取消息。我们在 Internet 上看到的所有示例都在 operationcontract/servicemethod 上使用带有“”的 Action 属性,为什么我们在使用 netmessagebinding 时需要标记为操作“”?

当您有一个包含多个操作的服务合同时,SOAP 操作 header 值用于标识通过输入消息调用的操作。在 NetMessageBinding 情况下,输入消息本身不是 SOAP 消息,因此不会有可用于分派操作的 SOAP 操作值。

为了解决这个问题,WCF 允许您通过使用 Action="*" 标记来定义 "catch-all" 操作,这意味着任何未通过正常机制明确路由到某个操作的消息将被分派到 catch-all 操作。

因此,本质上,您在这里所做的是告诉 WCF 通过服务契约中的此操作处理所有传入消息。