Wcf BizTalk:多个请求-响应订阅

Wcf BizTalk:多个请求-响应订阅,wcf,biztalk,Wcf,Biztalk,我们有一个将状态记录到数据库的存储过程。对于现有应用程序,用户决定将状态写入其他服务器 我们在新服务器上复制了表和存储过程 我创建了一个新的wcf自定义发送端口,并将其配置为使用新数据库 我更改了业务流程绑定以使用新的发送端口 现在我得到以下错误: The message found multiple request response subscriptions. A message can only be routed to a single request response subscr

我们有一个将状态记录到数据库的存储过程。对于现有应用程序,用户决定将状态写入其他服务器

  • 我们在新服务器上复制了表和存储过程
  • 我创建了一个新的wcf自定义发送端口,并将其配置为使用新数据库
  • 我更改了业务流程绑定以使用新的发送端口
现在我得到以下错误:

The message found multiple request response subscriptions. A message can only be routed to a single request response subscription.
我认为,尽管业务流程绑定指定了使用BizTalk的端口,但它也在查找旧的发送端口定义

编排绑定是如何工作的?你知道为什么会混淆吗


(原始发送端口被其他应用程序使用,因此我无法删除或编辑它)

似乎旧端口仍在登记(可能只是登记),或者您可能需要重新启动您的
BizTalk
主机。

要完成您描述的任务,您不需要创建新的发送端口


只需更改现有发送端口的URI以指向新数据库。

将业务流程绑定到端口时,业务流程发布的该端口的任何消息都会将SPTransportID的上下文属性设置为端口的GUID。将筛选器添加到端口时,它会将其添加为OR。您可以通过转到新查询、搜索订阅和查找有问题的端口来看到这一点。例如,您将看到这样的订阅

http: //schemas.microsoft.com/BizTalk/2003/system-properties.SPTransportID == {E1293B10-2763-4600-B795-A0C4B4D5E6EC} 
   Or 
http: //schemas.microsoft.com/BizTalk/2003/system-properties.ReceivePortName == ExamplePort 

因此,要解决此问题,需要更新旧端口的筛选器,以便它从您重新指向的业务流程中排除消息。或者,如果其他应用程序业务流程已绑定到旧端口,则只需删除筛选器,它就可以正常工作。

其他BizTalk应用程序仍然需要旧端口。不过我会尝试重新启动主机。好主意这可能是个问题-根据错误,
请求-响应
消息不能有多个端口订阅,否则触发orch可能会得到多个回复,可能会发生冲突。您能否使两个端口上的订阅相互排斥,例如使用上下文属性筛选器?我同意。那么,为什么两个不同的端口(其中一个未绑定到此业务流程)算作可能的订户?它使用什么标准来决定使用哪个端口?它必须是绑定之外的东西。您可能至少对其中一个使用了直接绑定,过滤器仅基于
消息类型
?它对消息类型有一个过滤条件。它不是messagebox直接绑定端口。我已经重新启动了主机实例,我们将重新运行该作业。我想知道它是否创建了新的发送端口,但由于我没有跳出实例,它仍然保留对另一个实例的引用。其他BizTalk应用程序仍然需要旧端口感谢您的精彩解释。我很快会测试的。哇。没想到会有这种行为。谢谢