Windows Azure: как установить параметр конфигурации в качестве переменной среды?
Я попытался добавить это в свой файл ServiceDefinition.csdef:
<WorkerRole ...><Runtime><Environment>
<Variable name="AZURE_STORAGE_ACCOUNT">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value" />
</Variable>
</Environment></Runtime></WorkerRole>
И я установил настройку конфигурации в файле ServiceConfiguration.Cloud.cscfg:
<Role name="WorkerRole">
<ConfigurationSettings>
<Setting name="AZURE_STORAGE_ACCOUNT" value="<secret stuff>" />
</ConfigurationSettings>
</Role>
Но при запуске cspack
:
я получил следующую ошибку:
CloudServices091 : The '/RoleEnvironment/CurrentInstance/Configur
ationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value' is an
invalid xpath expression.
Ответы
Ответ 1
Вам не хватает декларации этого параметра? Я не вижу соответствующего элемента в вашем .csdef
, что-то вроде <ConfigurationSettings><Setting name="AZURE_STORAGE_ACCOUNT"/></ConfigurationSettings>
. Вам нужен один из них в вашем .csdef
, а затем вы все равно хотите, чтобы в вашем .cscfg
было включено значение.
Если вы используете Visual Studio, он должен отредактировать оба файла для вас, если вы используете его представление свойств. (Просто дважды щелкните роль, а затем нажмите, чтобы перейти к настройкам конфигурации и добавить новый.)
Ответ 2
Конфигурация кажется правильной. Было бы лучше, если вы сможете убедиться, что используете последнюю версию SDK. Функция xPath доступна в Windows Azure SDK 1.5 и более поздних версиях.
С наилучшими пожеланиями,
Ming Xu.
Ответ 3
Я пробовал различные варианты, упомянутые в блогах, например, включая настройки в обоих .cscfg и .csdef. Но, похоже, это не работает.
Кроме того, другие запросы Xpath, такие как
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/@id"/>
работают правильно.
Наконец, я понял, что используемое имя переменной отличается:
В cscfg у меня было:
<Setting name="WFFEPeriodicRestartTime" value="168:00:00" />
в csdef у меня было:
<ConfigurationSettings>
<Setting name="PeriodicRestartTime" />
</ConfigurationSettings>
....
....
<Variable name="PeriodicRestartTime">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='WFFEPeriodicRestartTime']/@value" />
</Variable>
Изменен csdef:
<ConfigurationSettings>
<Setting name="WFFEPeriodicRestartTime" />
</ConfigurationSettings>
....
....
<Variable name="WFFEPeriodicRestartTime">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='WFFEPeriodicRestartTime']/@value" />
</Variable>
Кажется, что он работает правильно.