我什么时候应该使用ServiceFabricIntegrationOptions.UseUniqueServiceUrl

时间:2017-04-28 11:23:42

标签: c# asp.net-core azure-service-fabric

This似乎总是有必要,否则你可能会解决不正确的服务 - 因为无法保证服务不会移动等......

默认的asp.net核心服务模板使用 UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)

这有什么理由吗?什么时候可以不使用ServiceFabricIntegration中间件?

E:我看到这些实际上是一个标志枚举。因此,您应该始终使用UseUniqueServiceUrl https://github.com/Azure/service-fabric-aspnetcore/blob/develop/src/Microsoft.ServiceFabric.AspNetCore/WebHostBuilderServiceFabricExtension.cs

1 个答案:

答案 0 :(得分:2)

恭敬地,我不认为你已经很好地阅读了文档。很好地解释了here

  

使用动态分配端口的服务应该使用此中间件。

     

使用固定唯一端口的服务在协作环境中没有此问题。固定的唯一端口通常用于面向外部的服务,这些服务需要一个众所周知的端口供客户端应用程序连接。 例如,大多数面向Internet的Web应用程序将使用端口80或443进行Web浏览器连接。在这种情况下,不应启用唯一标识符。

总结:使用Kestrel或WebListener时,您可以选择使用动态端口或固定端口。请参阅上述链接中使用带有静态端口的WebListener / Kestrel 使用带有动态端口的WebListener / Kestrel 部分。当您选择使用动态端口时,请使用ServiceFabricIntegrationOptions.UseUniqueServiceUrl,否则请使用ServiceFabricIntegrationOptions.None作为中间件的参数。

现在,为什么在动态端口的情况下需要这个独特的服务URL中间件,有一个场景描述了可能的问题:

  

如果服务使用动态分配的应用程序端口,则服务副本可能巧合地使用先前位于同一物理机或虚拟机上的另一个服务的相同IP:端口端点。这可能导致客户端错误地连接到错误的服务。如果发生以下事件序列,则会发生这种情况:

     
      
  • 服务A通过HTTP侦听10.0.0.1:30000。
  •   
  • 客户端解析服务A并获取地址10.0.0.1:30000
  •   
  • 服务A移动到其他节点。
  •   
  • 服务B位于10.0.0.1,巧合使用相同的端口30000。
  •   
  • 客户端尝试使用缓存的地址10.0.0.1:30000连接到服务A.
  •   
  • 客户端现已成功连接到服务B,但未意识到它已连接到错误的服务。
  •   
     

这可能会导致随机时间出现的错误很难诊断