通过Microsoft.ServiceFabric.Services.Remoting 3.2.162

时间:2018-08-05 09:28:39

标签: azure-service-fabric service-fabric-remoting

我使用远程V1提供了多项服务,而使用V2_1提供了新服务。

使用Microsoft.ServiceFabric.Services.Remoting版本3.2.162从asp.net核心2.1应用程序调用V2_1服务没问题。 但是我无法调用“旧的” V1服务,因为它尝试通过V2_1进行连接。第一次引发异常:

NamedEndpoint 'V2_1Listener' not found in the address '{"Endpoints":{"":"DESKTOP-XX:33016+086fcdfa-9eba-49e0-8953-6fae844d8cf0-131779318708109471-d1b542d1-71bb-40a8-b22d-d0aabc9f4f5c"}}' for partition '086fcdfa-9eba-49e0-8953-6fae844d8cf0'

第二次挂起,并且占用大量CPU。

创建自定义ServiceProxyFactory的workaround不再起作用,因为在3.2.162中删除了命名空间Microsoft.ServiceFabric.Services.Remoting.V1

因此,我决定在upgrade steps之后,通过添加一个额外的V2_1侦听器来升级V1服务。但是在处理完这一行之后再次出现:

 [assembly: FabricTransportServiceRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1 | RemotingListenerVersion.V1, RemotingClientVersion = RemotingClientVersion.V2_1)]

找不到RemotingListenerVersion.V1。

我不能简单地将V1侦听器更改为V2_1,因为其他服务取决于它。

我该怎么办?可以同时使用V1和V2_1吗?我在这里有点困惑。

1 个答案:

答案 0 :(得分:1)

Service Fabric Remoting V2 is not supported in .NET Core.我无法相信它没有记录。

就我而言,我有一个针对.NET Standard 2.0的域项目,而服务项目正在引用该程序包并针对.NET 4.6.2。

因此,我更改了迁移计划:

  1. 确保域/接口项目以完整的.NET框架为目标, 例如.NET 6.4.2
  2. Added a V2_1 listener next to the current V1 listener
  3. 更新了所有客户端,因此它们正在使用V2_1
  4. 删除了V1侦听器,并将我们的项目切换回.NET Standard