2012-05-03 11 views
10

Próbowałem dodając to do mojego pliku ServiceDefinition.csdef:Windows Azure: jak odsłonić ustawienie konfiguracyjne jako zmienną środowiskową?

<WorkerRole ...><Runtime><Environment> 
    <Variable name="AZURE_STORAGE_ACCOUNT"> 
     <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value" /> 
    </Variable> 
</Environment></Runtime></WorkerRole> 

I ustawić ustawienie w moim pliku ServiceConfiguration.Cloud.cscfg konfigurację:

<Role name="WorkerRole"> 
    <ConfigurationSettings> 
    <Setting name="AZURE_STORAGE_ACCOUNT" value="<secret stuff>" /> 
    </ConfigurationSettings> 
</Role> 

Ale mam następujący błąd, gdy uruchomić cspack:

CloudServices091 : The '/RoleEnvironment/CurrentInstance/Configur 
ationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value' is an 
invalid xpath expression. 
+2

To pytanie samo w sobie było na tyle aby dostać się do celu, miałem dość wbudowanej odpowiedzi. +1! –

Odpowiedz

0

konfiguracja wydaje się być poprawne. Byłoby lepiej, gdybyś mógł upewnić się, że używasz najnowszego zestawu SDK. Funkcja xPath jest dostępna w pakiecie Windows Azure SDK 1.5 i nowszych wersjach.

Pozdrawiam,

Ming Xu.

+0

Używam wersji 1.6. –

8

Brakuje deklaracji tego ustawienia? Nie widzę odpowiedniego elementu w twoim .csdef, coś w stylu <ConfigurationSettings><Setting name="AZURE_STORAGE_ACCOUNT"/></ConfigurationSettings>. Potrzebujesz jednego z tych w swoim .csdef, a następnie nadal chcesz ten w swoim .cscfg, który zawiera wartość.

Jeśli używasz programu Visual Studio, powinien on edytować oba pliki, jeśli używasz jego widoku właściwości. (Kliknij dwukrotnie na rolę, a następnie kliknij, aby przejść do ustawień konfiguracji i dodać nową.)

-1

Próbowałem różnych opcji wymienionych na blogach, takich jak włączenie ustawienia zarówno .cscfg i .csdef. Ale wydaje się, że nie działa. Również inne Xpath pyta jak

 <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/@id"/> 

działać poprawnie.

W końcu zorientowali się, że zmienna nazwa używana była inna:

W cscfg miałem:

<Setting name="WFFEPeriodicRestartTime" value="168:00:00" /> 

w csdef miałem:

<ConfigurationSettings> 
     <Setting name="PeriodicRestartTime" /> 
    </ConfigurationSettings> 

.... ...

<Variable name="PeriodicRestartTime"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='WFFEPeriodicRestartTime']/@value" /> 
    </Variable> 

Zmieniono csdef do:

<ConfigurationSettings> 
     <Setting name="WFFEPeriodicRestartTime" /> 
    </ConfigurationSettings> 

.... ....

<Variable name="WFFEPeriodicRestartTime"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='WFFEPeriodicRestartTime']/@value" /> 
      </Variable> 

wydaje się działać poprawnie teraz