CloudConfigurationManager.GetSetting()使用Azure Configuration Manager 3.0返回null

时间:2015-03-19 18:32:28

标签: c# azure azure-worker-roles

我刚刚(通过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,它确实可以正常工作。但是对CloudConfigurationManager.GetSetting()的任何调用都会在3.0下返回null。

我没有找到任何关于3.0下应该改变的文档。有人有什么建议吗?这只是某种错误吗? (显然我现在坚持2.x - 没有令人信服的理由去达到3.0 - 但我喜欢坚持使用最新版本的东西作为一般规则。)

2 个答案:

答案 0 :(得分:3)

这已在新发布的3.1.0版本中修复。

干杯, Ogail

答案 1 :(得分:0)

这是因为一个名为AzureApplicationSettings的类加载了ServiceRuntime,它正在寻找一个名为Microsoft.Azure.ServiceRuntime的程序集(见下文)。 2.5 sdk中的当前版本仍具有旧名称(Microsoft.WindowsAzure)。此程序集(至少在过去)尚未通过nuget提供,而是随SDK一起提供。下周(2015年3月24日)有一个很大的Azure announcement,所以我们当时可能会得到一个新的SDK。迄今为止,各种Azure组织正在努力解决如何推动彼此相互依赖的时间协调版本的问题。

private readonly string[] knownAssemblyNames = new string[]
{
  "Microsoft.Azure.ServiceRuntime, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL"
}