如果您创建新的Service Fabric Web Api应用程序,则PackageRoot/ServiceManifest.xml
文件具有属性为ServiceManifest/Resource/Endpoints/Endpoint
的{{1}}节点。 Service Fabric使用它来决定托管服务的端口。
但是如果你删除这个属性,那么Service Fabric会为你动态选择一个端口。
我正在尝试找到一种在应用程序运行时获取该端口的方法。
我知道我可以向Service Fabric API索取我的服务的端点列表,然后通过当前节点将其限制为低。这非常接近。但如果由于某种原因我的服务在同一节点上托管两次,那么我将无法知道哪一个是“当前”应用程序。
我希望有一种方法不涉及对群集的服务调用。
选择的端口是否存储在我可以访问的位置。 (也许在Port
?
答案 0 :(得分:0)
您不能在1个应用程序中的同一节点上运行同一服务(副本)的多个实例。因此,使用与this类似的代码,按当前应用程序名称过滤API查询GetApplicationListAsync
。您可以从ServiceContext
获取当前的应用程序名称。
答案 1 :(得分:0)
我想我找到了获得这个价值的方法。似乎服务结构为执行进程添加了一堆环境变量。其中一个有端口。
这段代码给了我我的端口号:
Environment.GetEnvironmentVariable("FABRIC_ENDPOINT_SERVICEENDPOINT")
需要注意的重要一点是,您用作环境变量查找字符串的值取决于应用程序的配置。
第一部分(FABRIC_ENDPOINT_)始终相同。
但其余的取决于我在问题(ServiceManifest.xml)中提到的配置文件中的值。它必须与ServiceManifest/Resource/Endpoints/Endpoint
Name属性中的内容相匹配。