是否可以获取运行我的代码的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;并在我的代码中使用它,但我还没有找到任何可以让我这样做的东西。有什么想法吗?
答案 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。
我希望这会有所帮助。