0

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

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

它工作正常,但我也可以看到: 在此处输入图像描述

从 ServiceRuntime 获取“StorageConnectionString”:失败。

请解释为什么它显示这样的失败消息。还有这个 CloudConfigurationManager 是如何工作的?

注意:不要标记任何解决方法,因为我已经看到了它们。这是我已经访问过但不满意的链接。

链路 1链路 2

4

1 回答 1

4

请解释为什么它显示这样的失败消息。还有这个 CloudConfigurationManager 是如何工作的?

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

Microsoft Azure 配置管理器提供了一个统一的 API 来加载配置设置,无论应用程序托管在何处 - 无论是在本地还是在云服务中。

CloudConfigurationManager.GetSetting将从适当的配置存储中读取配置设置。如果您的应用程序作为 .NET Web 应用程序运行,该GetSetting方法将从Web.configorapp.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)禁用跟踪日志。

于 2017-07-18T03:04:17.253 回答