C# 我应该何时使用ServiceFabricIntegrationOptions.UseUniqueServiceUrl
似乎是说这总是必要的,否则您可能会解决不正确的服务--因为无法保证服务不会移动等等 默认的asp.net核心服务模板使用C# 我应该何时使用ServiceFabricIntegrationOptions.UseUniqueServiceUrl,c#,azure,asp.net-core,azure-service-fabric,C#,Azure,Asp.net Core,Azure Service Fabric,似乎是说这总是必要的,否则您可能会解决不正确的服务--因为无法保证服务不会移动等等 默认的asp.net核心服务模板使用 UseServiceFabricIntegration(侦听器,ServiceFabricIntegrationOptions.None) 这有什么原因吗?什么时候可以不使用ServiceFabricIntegration中间件 E:我看到这些实际上是一个标志枚举。因此,您可能应该始终恭敬地使用UseUniqueServiceUrl,我认为您对文档的阅读还不够透彻。这是很好
UseServiceFabricIntegration(侦听器,ServiceFabricIntegrationOptions.None)
这有什么原因吗?什么时候可以不使用ServiceFabricIntegration
中间件
E:我看到这些实际上是一个标志枚举。因此,您可能应该始终恭敬地使用UseUniqueServiceUrl,我认为您对文档的阅读还不够透彻。这是很好的解释: 使用动态分配端口的服务应使用此中间件 使用固定唯一端口的服务在协作环境中不存在此问题。固定唯一端口通常用于面向外部的服务,这些服务需要一个众所周知的端口供客户端应用程序连接例如,大多数面向Internet的web应用程序将使用端口80或443进行web浏览器连接。在这种情况下,不应启用唯一标识符。 总结如下:当使用Kestrel或WebListener时,您可以选择使用动态端口或固定端口。请参阅上述链接中的“将WebListener/Kestrel与静态端口一起使用”和“将WebListener/Kestrel与动态端口一起使用”部分。选择使用动态端口时,请使用
servicefactricintegrationoptions.UseUniqueServiceUrl
,否则请使用servicefactricintegrationoptions.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的服务
- 客户端现在已成功连接到服务B,但未意识到它连接到了错误的服务
恕我直言,我认为你对这些文件读得不够好。这是很好的解释: 使用动态分配端口的服务应使用此中间件 使用固定唯一端口的服务在协作环境中不存在此问题。固定唯一端口通常用于面向外部的服务,这些服务需要一个众所周知的端口供客户端应用程序连接例如,大多数面向Internet的web应用程序将使用端口80或443进行web浏览器连接。在这种情况下,不应启用唯一标识符。 总结如下:当使用Kestrel或WebListener时,您可以选择使用动态端口或固定端口。请参阅上述链接中的“将WebListener/Kestrel与静态端口一起使用”和“将WebListener/Kestrel与动态端口一起使用”部分。选择使用动态端口时,请使用
servicefactricintegrationoptions.UseUniqueServiceUrl
,否则请使用servicefactricintegrationoptions.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的服务
- 客户端现在已成功连接到服务B,但未意识到它连接到了错误的服务