CloudConfigurationManager.GetSetting(“”)实际上如何工作?

时间:2017-07-17 08:16:17

标签: .net azure app-config azure-service-runtime

我正在使用CloudConfigurationManager来获取我的连接字符串。 我创建了一个 * Azure Service Fabric应用程序

storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

工作正常,但我也可以看到: enter image description here

从ServiceRuntime获取“StorageConnectionString”:失败。

请解释为什么会显示 FAIL 消息。此CloudConfigurationManager如何工作?

注意:请勿标记任何变通方法,因为我已经看过它们。 以下是我已访问过的链接,但不满意。

Link-1和     Link-2

1 个答案:

答案 0 :(得分:3)

  

请解释为何显示此类失败信息。此CloudConfigurationManager如何工作?

AFAIK,Microsoft.WindowsAzure.ConfigurationManager只是一个没有依赖关系的独立库。它描述如下:

  

Microsoft Azure配置管理器提供统一的API来加载配置设置,无论托管应用程序的位置 - 无论是内部部署还是云服务。

CloudConfigurationManager.GetSetting将从相应的配置存储中读取配置设置。如果您的应用程序作为.NET Web应用程序运行,GetSetting方法将从Web.configapp.config文件中检索设置值。当应用程序在Windows Azure云服务或Windows Azure网站中运行时,GetSetting将从ServiceConfiguration.cscfg检索设置值。

使用ILSpy,我们会发现GetSetting方法会先检查 ServiceRuntime 提供程序,然后利用RoleEnvironment.GetConfigurationSettingValue(string configurationSettingName)获取设置值。如果值为null,那么它将使用 ConfigurationManager 提供程序并利用ConfigurationManager.AppSettings['<settingName>'];

internal string GetSetting(string name, bool outputResultsToTrace)
{
    string value = AzureApplicationSettings.GetValue("ServiceRuntime", name, new Func<string, string>(this.GetServiceRuntimeSetting), outputResultsToTrace);
    if (value == null)
    {
        string arg_44_0 = "ConfigurationManager";
        Func<string, string> arg_44_2;
        if ((arg_44_2 = AzureApplicationSettings.<>c.<>9__10_0) == null)
        {
            arg_44_2 = (AzureApplicationSettings.<>c.<>9__10_0 = new Func<string, string>(AzureApplicationSettings.<>c.<>9.<GetSetting>b__10_0));
        }
        value = AzureApplicationSettings.GetValue(arg_44_0, name, arg_44_2, outputResultsToTrace);
    }
    return value;
}

由于您在app.config文件中配置了设置,并且GetSetting方法默认情况下会将日志写入Trace,因此您将看到所提供的跟踪日志。此外,您可以使用GetSetting('<settingName>',false)来禁用跟踪日志。