CloudConfigurationManager.GetSetting() returns 空与 Azure 配置管理器 3.0
CloudConfigurationManager.GetSetting() returns null with Azure Configuration Manager 3.0
我刚刚(通过 nuget)升级到最新版本的 Azure 配置管理器 (3.0.0):
https://www.nuget.org/packages/Microsoft.WindowsAzure.ConfigurationManager/3.0.0
一旦我这样做 - 并进行了一些命名空间调整 - 看起来它已停止为我的 Azure 辅助角色配置返回值。
我正在检索这样的连接字符串值:
var storageCs = CloudConfigurationManager.GetSetting("Microsoft.Storage.ConnectionString");
我的服务定义文件如下所示:
<?xml version="1.0"?>
<ServiceDefinition name="Payboard.Worker" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<WorkerRole name="Payboard.Worker.Events" vmsize="Small">
<ConfigurationSettings>
<Setting name="Microsoft.Storage.ConnectionString" />
<Setting name="PayboardEntities" />
<Setting name="cacheSystem" />
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" />
<Setting name="redisCacheConnectionString" />
</ConfigurationSettings>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<Startup priority="-2">
</Startup>
</WorkerRole>
</ServiceDefinition>
我的服务配置文件是这样的(删除了敏感信息):
<?xml version="1.0"?>
<ServiceConfiguration serviceName="Payboard.Worker" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-06.2.4">
<Role name="Payboard.Worker.Events">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.Storage.ConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="PayboardEntities" value="(standard connection string stuff)" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="ken" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="(encrypted password)" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2015-06-19T23:59:59.0000000-07:00" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
<Setting name="cacheSystem" value="simple" />
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
<Setting name="redisCacheConnectionString" value="(redis connection string)" />
</ConfigurationSettings>
<Certificates>
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="(blah)" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
所有这些在 2.0.3 下都能正常工作,事实上,如果我恢复到 2.0.3 也能正常工作。但是在 3.0 下任何对 CloudConfigurationManager.GetSetting()
returns 的调用都是 null。
我还没有找到任何关于 3.0 下应该改变的内容的文档。有人有什么建议吗?这只是某种错误吗? (显然我现在坚持使用 2.x - 没有令人信服的理由达到 3.0 - 但我喜欢坚持使用最新版本的东西作为一般规则。)
这是因为加载 ServiceRuntime 的名为 AzureApplicationSettings 的 class 正在寻找名为 Microsoft.Azure.ServiceRuntime 的程序集(见下文)。 2.5 sdk 中的当前版本仍然使用旧名称 (Microsoft.WindowsAzure)。该程序集(至少在过去)不是通过 nuget 提供的,而是随 SDK 一起提供的。下周 (3/24/15) 将有一个大型 Azure announcement,因此我们可能会在那个时候获得一个新的 SDK。到目前为止,各个 Azure 小组一直在研究如何准确地推动相互依赖的时间协调发布。
private readonly string[] knownAssemblyNames = new string[]
{
"Microsoft.Azure.ServiceRuntime, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL"
}
新发布的 3.1.0 版本修复了这个问题
干杯,
奥盖尔
我刚刚(通过 nuget)升级到最新版本的 Azure 配置管理器 (3.0.0):
https://www.nuget.org/packages/Microsoft.WindowsAzure.ConfigurationManager/3.0.0
一旦我这样做 - 并进行了一些命名空间调整 - 看起来它已停止为我的 Azure 辅助角色配置返回值。
我正在检索这样的连接字符串值:
var storageCs = CloudConfigurationManager.GetSetting("Microsoft.Storage.ConnectionString");
我的服务定义文件如下所示:
<?xml version="1.0"?>
<ServiceDefinition name="Payboard.Worker" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<WorkerRole name="Payboard.Worker.Events" vmsize="Small">
<ConfigurationSettings>
<Setting name="Microsoft.Storage.ConnectionString" />
<Setting name="PayboardEntities" />
<Setting name="cacheSystem" />
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" />
<Setting name="redisCacheConnectionString" />
</ConfigurationSettings>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<Startup priority="-2">
</Startup>
</WorkerRole>
</ServiceDefinition>
我的服务配置文件是这样的(删除了敏感信息):
<?xml version="1.0"?>
<ServiceConfiguration serviceName="Payboard.Worker" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-06.2.4">
<Role name="Payboard.Worker.Events">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.Storage.ConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="PayboardEntities" value="(standard connection string stuff)" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="ken" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="(encrypted password)" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2015-06-19T23:59:59.0000000-07:00" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
<Setting name="cacheSystem" value="simple" />
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ClientDiagnosticLevel" value="1" />
<Setting name="redisCacheConnectionString" value="(redis connection string)" />
</ConfigurationSettings>
<Certificates>
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="(blah)" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
所有这些在 2.0.3 下都能正常工作,事实上,如果我恢复到 2.0.3 也能正常工作。但是在 3.0 下任何对 CloudConfigurationManager.GetSetting()
returns 的调用都是 null。
我还没有找到任何关于 3.0 下应该改变的内容的文档。有人有什么建议吗?这只是某种错误吗? (显然我现在坚持使用 2.x - 没有令人信服的理由达到 3.0 - 但我喜欢坚持使用最新版本的东西作为一般规则。)
这是因为加载 ServiceRuntime 的名为 AzureApplicationSettings 的 class 正在寻找名为 Microsoft.Azure.ServiceRuntime 的程序集(见下文)。 2.5 sdk 中的当前版本仍然使用旧名称 (Microsoft.WindowsAzure)。该程序集(至少在过去)不是通过 nuget 提供的,而是随 SDK 一起提供的。下周 (3/24/15) 将有一个大型 Azure announcement,因此我们可能会在那个时候获得一个新的 SDK。到目前为止,各个 Azure 小组一直在研究如何准确地推动相互依赖的时间协调发布。
private readonly string[] knownAssemblyNames = new string[]
{
"Microsoft.Azure.ServiceRuntime, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL"
}
新发布的 3.1.0 版本修复了这个问题
干杯, 奥盖尔