如何获取当前Service Fabric应用程序的名称?

时间:2017-01-17 23:16:45

标签: c# azure-service-fabric

是否可以获取运行我的代码的Service Fabric应用程序的名称?

例如,我的ApplicationParameters文件包含:

<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/mytestapp" xmlns="http://schemas.microsoft.com/2011/01/fabric">

我想检索&#34; mytestapp&#34;并在我的代码中使用它,但我还没有找到任何可以让我这样做的东西。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

ApplicationName作为字符串(不幸的是不是URI)作为CodePackageActivationContext上的属性存在。

// System.Fabric.CodePackageActivationContext
public string ApplicationName
{
    get;
    internal set;
}

CodePackageActivationContext出现在ServiceContext上,每个服务都在其构造函数中传递。有状态服务的例子。

public StatefulService(StatefulServiceContext serviceContext)
    : this(serviceContext, new ReliableStateManager(serviceContext, null))
{
}

如果您的服务是访客或容器或者没有使用ReliableServices API的东西,那么明确地将名称作为配置设置传递可能是您最好的选择。

答案 1 :(得分:2)

在我的情况下,我尝试在项目之间传递上述ApplicationName(在我的案例中为Stateful to Stateless),但令人惊讶地痛苦,因为存在不一致由于不同的VM和节点不断变化而导致的值。

我还尝试在项目之间进行通信,方法是在外部项目的某些(静态)变量上设置一个不起作用的值。

最后,我还尝试将应用程序名称写入文本文件,但这仅暂时起作用,因为每个节点都保留文本文件的异步副本。

我的解决方案是利用Environment.GetEnvironmentVariable("Fabric_ApplicationName")完美运作的。

请参阅here

我希望这会有所帮助。