1

我正在从不同的参与者类型访问具有远程处理的服务。他们通过基类中的共享代码调用 ServiceProxy.Create 方法来做到这一点。

我有用于访问主副本和辅助副本的用例,并使用指定 TargetReplicaSelector 的方法重载。这通常工作得很好。

在对服务进行升级之后(无需更改代码,只是测试在运行时进行升级如何影响通信),一些参与者(总是相同的类型!)在调用 ServiceProxy.Create 时获得对辅助副本的引用,甚至虽然我特别要求使用 TargetReplicaSelector.PrimaryReplica 参数的主副本。其他演员类型继续获得应有的主要地位。

这怎么可能?

编辑1:我知道在升级过程中,主要将成为次要,并且任何次要都将成为主要。我可以在升级期间在资源管理器中看到这一点。

所以看起来 ServiceProxy.Create - 当从某些参与者类型调用时 - 保留了一些关于哪个副本是主要的过时信息?我虽然那个 ServiceProxy 会自动检测这些变化?这是一个错误还是我做错了什么?

Edit2:我发现此服务远程处理文档页面的评论:

Yongjun Dec 7, 2016 如何处理/断开远程服务,

在我们的产品中,在有状态服务 A 中,它会通过 ServiceProxy.Create 连接到另一个有状态服务 B

但是在服务A切换后,通过“netstat -ano”它仍然有到服务B的连接,如果服务A再次切换到主服务器,它将有两个连接到服务B

似乎是同样的问题。

问题:如何避免这个问题?

4

0 回答 0