非SF项目是否可以使用applicationmanifest配置值?

时间:2017-11-16 17:10:04

标签: c# .net visual-studio-2017 microservices azure-service-fabric

我已按以下方式设置Service Fabric应用程序:

Solution
--SF Project
  --ApplicationManifest.xml
--Stateless Project (uses app manifest values)
--Stateless Project (uses app manifest values)
--Class Library (used as a repository by the above two projects)

如何启用类库以使用SF Project中的ApplicationManifest.xml配置文件?

为了让项目能够使用AppManifest进行构建/部署,他们只需要像这样创建:

enter image description here

未作为Service Fabric项目添加的项目如何使用applicationmanifest?

Service Fabric项目能够通过在settings.xml和servicemanifest中包含参数来使用appmanifest(但非SF项目不能):

enter image description here

1 个答案:

答案 0 :(得分:1)

选项#1

如果您需要访问服务的setting.xml中定义的参数,那么下一个应该可以工作 -

  1. 在您的非SF项目中,安装 Microsoft.Extensions.Configuration ServiceFabric.Extensions.Configuration NuGet包
  2. 无论您何时决定访问参数,请使用下一个代码段 -

    var builder = new ConfigurationBuilder().AddFabricConfiguration("Config");
    var configuration = builder.Build();
    var section = configuration.GetSection("MyConfigSection");
    var parameterValue = section["MyParameter"];
    
  3. 但需要注意的是 - 您一次只能访问一个SF服务。这是因为AddFabricConfiguration()通过调用FabricRuntime.GetActivationContext()来工作,它将正在加载的设置与您正在调用非SF代码的SF服务联系起来。

    选项#2

    下一个选项可以在任何可以与SF建立连接的地方使用。使用下面的代码,您可以读取传递到应用清单中的任何参数 -

    var fClient = new FabricClient();
    var namespaceManager = new XmlNamespaceManager(new NameTable());
    namespaceManager.AddNamespace("ns", "http://schemas.microsoft.com/2011/01/fabric");
    var manifest = XDocument.Parse(fClient.ApplicationManager.GetApplicationManifestAsync("YOUR_APP_TYPE_NAME", "YOUR_APP_TYPE_VERSION").Result);         
    var parameterValue = manifest.XPathSelectElement("/ns:ApplicationManifest/ns:Parameters/ns:Parameter[@Name='PARAMETER_NAME']", namespaceManager).Attribute("DefaultValue").Value;