CloudConfigurationManager.GetSetting("") 是如何工作的?

How CloudConfigurationManager.GetSetting("") actually works?

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

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

它工作正常,但我也可以看到:

正在从 ServiceRuntime 获取 "StorageConnectionString":失败。

请解释为什么显示这样的 FAIL 消息。另外这个 CloudConfigurationManager 是如何工作的?

注意:不要标记任何变通方法,因为我已经看到了所有变通方法。 这是我已经访问过但不满意的链接。

Link-1Link-2

Kindly explain why is it showing such FAIL message. Also how is this CloudConfigurationManager works?

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

Microsoft Azure Configuration Manager provides a unified API to load configuration settings regardless of where the application is hosted - whether on-premises or in a Cloud Service.

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

使用ILSpy, we could find the GetSetting method would check the ServiceRuntime provider firstly and leverage 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) 来禁用跟踪日志。