我正在使用来自不同actor类型的远程访问服务。他们通过基类中的共享代码执行此操作,调用ServiceProxy.Create方法。
我有用于访问主副本和副副本的用例,并使用指定TargetReplicaSelector的方法重载。这通常很好。
在升级服务之后(不更改代码,只测试运行时升级如何影响通信),一些actor(总是相同的类型!)获得对辅助副本的引用< / strong>调用ServiceProxy.Create时,即使我特意要求使用TargetReplicaSelector.PrimaryReplica参数的主副本。 其他演员类型继续按原样获得主要类型。
这怎么可能?
编辑1:我知道在升级过程中,主服务器将成为辅助服务器,并且任何辅助服务器都将成为主服务器。我可以在升级过程中在资源管理器中看到这一点。
所以看起来ServiceProxy.Create--从一些actor类型调用时 - 是保留一些关于哪个副本是主要的陈旧信息? 我虽然ServiceProxy会自动检测到这些变化? 这是一个错误还是我做错了什么?
编辑2:我发现此评论为this service remoting doc page:
Yongjun 2016年12月7日如何处置/断开远程服务,
在我们的产品中,在有状态服务A中,它将连接到另一个 有状态服务B通过ServiceProxy.Create
但是在服务A切换之后,它仍然有连接 服务B使用“netstat -ano”,如果服务A切换到主服务器 再次,它将与服务B有两个连接
似乎是同样的问题。
问题:如何避免此问题?