获取分配给Service Fabric中当前服务的端口

时间:2017-12-11 23:26:54

标签: azure-service-fabric service-fabric-on-premises

如果您创建新的Service Fabric Web Api应用程序,则PackageRoot/ServiceManifest.xml文件具有属性为ServiceManifest/Resource/Endpoints/Endpoint的{​​{1}}节点。 Service Fabric使用它来决定托管服务的端口。

但是如果你删除这个属性,那么Service Fabric会为你动态选择一个端口。

我正在尝试找到一种在应用程序运行时获取该端口的方法。

我知道我可以向Service Fabric API索取我的服务的端点列表,然后通过当前节点将其限制为低。这非常接近。但如果由于某种原因我的服务在同一节点上托管两次,那么我将无法知道哪一个是“当前”应用程序。

我希望有一种方法不涉及对群集的服务调用。

选择的端口是否存储在我可以访问的位置。 (也许在Port

2 个答案:

答案 0 :(得分:0)

您不能在1个应用程序中的同一节点上运行同一服务(副本)的多个实例。因此,使用与this类似的代码,按当前应用程序名称过滤API查询GetApplicationListAsync。您可以从ServiceContext获取当前的应用程序名称。

答案 1 :(得分:0)

我想我找到了获得这个价值的方法。似乎服务结构为执行进程添加了一堆环境变量。其中一个有端口。

这段代码给了我我的端口号:

Environment.GetEnvironmentVariable("FABRIC_ENDPOINT_SERVICEENDPOINT")

需要注意的重要一点是,您用作环境变量查找字符串的值取决于应用程序的配置。

第一部分(FABRIC_ENDPOINT_)始终相同。

但其余的取决于我在问题(ServiceManifest.xml)中提到的配置文件中的值。它必须与ServiceManifest/Resource/Endpoints/Endpoint Name属性中的内容相匹配。