50

Mam aplikację, którą właśnie migruję do platformy Azure. Obecnie używam transformacji web.config do zarządzania zmianą bazy danych łączącej środowiska dev/staging/prod. Jak najlepiej zarządzać wieloma ciągami połączeń w usłudze Azure?Sprawdzone metody obsługi ciągów Azure

Odpowiedz

28

W przypadkach, w których nie ma znaczenia, jeśli deweloper widzi poświadczenia produkcji, można użyć wbudowanych w Visual Studio 10 transformacje config. Jeśli to jest to, czego szukasz, wykonaj następujące kroki:

1.Navigate do folderu Azure projektu w eksploratora plików
2. Zrób kopię ServiceConfiguration.cscfg
3. Zmień nazwę kopii do ServiceConfiguration.Base .cscfg
4. Dla każdej konfiguracji kompilacji (np. Dev, Staging, Production), stwórz ServiceConfiguration. < Nazwa konfiguracji kompilacji >. Plik ccfg. W tych plików, można użyć normalnej config transformation syntax
5. Otwórz plik .ccproj w edytorze tekstowym
6. znaleźć następujące węzła

<ItemGroup> 
    <ServiceDefinition Include="ServiceDefinition.csdef" /> 
    <ServiceConfiguration Include="ServiceConfiguration.cscfg" /> 
</ItemGroup> 

i zastąpić go z tego (trzeba będzie zmieniać ten blok, aby dopasować configs build):

<ItemGroup> 
    <ServiceDefinition Include="ServiceDefinition.csdef" /> 
    <ServiceConfiguration Include="ServiceConfiguration.cscfg" /> 
    <None Include="ServiceConfiguration.Base.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
    <None Include="ServiceConfiguration.Dev.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
    <None Include="ServiceConfiguration.Staging.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
    <None Include="ServiceConfiguration.Production.cscfg"> 
     <DependentUpon>ServiceConfiguration.cscfg</DependentUpon> 
    </None> 
</ItemGroup> 

7.Add następujące na koniec pliku .ccproj, tuż nad </Project>:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" /> 
<Target Name="BeforeBuild"> 
    <TransformXml Source="ServiceConfiguration.Base.cscfg" Transform="ServiceConfiguration.$(Configuration).cscfg" Destination="ServiceConfiguration.cscfg" /> 
</Target> 

8.Jeśli używasz serwera CI, który nie ma zainstalowanego programu Visual Studio 10, prawdopodobnie będziesz musiał skopiować folder C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web i jego zawartość z maszyny programującej na serwer.

Aktualizacja: W @SolarSteve noted, może trzeba dodać do swojej ServiceConfiguration nazw plików * cscfg... Oto przykład z ServiceConfiguration.Base.cscfg:

<sc:ServiceConfiguration serviceName="MyServiceName" osFamily="1" osVersion="*" xmlns:sc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <sc:Role name="MyRoleName"> 
    <sc:Instances count="1" /> 
    <sc:ConfigurationSettings> 
     <sc:Setting name="DataConnectionString" value="xxx" /> 
    </sc:ConfigurationSettings> 
    </sc:Role> 
</sc:ServiceConfiguration> 
+0

Otrzymuję komunikat "WAT020: Tylko jedna definicja usługi może być aktywna." błąd podczas budowania przy użyciu powyżej ... jakichkolwiek pomysłów, co zrobiłem źle? –

+2

Zignoruj ​​powyższe Jestem idiotą ... –

+0

Hej jmac, stworzyłem dodatek VS (http://visualstudiogallery.msdn.microsoft.com/69023d00 -a4f9-4a34-a6cd-7e854ba318b5), który używa TransformXml, a grupa ppl prosi o wsparcie projektu Azure.To wygląda na to, że byłby to dobry punkt wyjścia dla mnie.Jeśli zaimplementuję to czy zapewniłeś, że mam rację? mnie przez email: sayedha [at] {MICROSOFTdotCOM}. –

14

Osobiście:

  1. Dropped internetowych Przekształcenia config całkowicie.
  2. Ustawienie jest pobierane z cscfg.
  3. Wersja rozwojowa cscfg wskazuje na lokalne środowisko programistyczne (przechowywane w sterowaniu wersją).
  4. Podczas wdrażania do produkcji dostarczamy bezpieczne dane uwierzytelniające do produkcji SQL Azure i pamięci masowej.

Dla próbki klasy zarządzania ustawienia, które skanuje ustawienia aplikacji i chmura środowisko dla wartości konfiguracyjnych, można sprawdzić open source Lokad.CQRS for Windows Azure projektu (patrz CloudSettingsProvider)

6

Mamy szereg środowisk (lokalnego dev wewnątrz dev fabric, lokalny dev poza dev fabric, testowanie, release, który ma 2 wersje: release/prod i release/stage oraz 20 projektów, z których niektóre wymagają pewnej zmienności w ustawieniach konfiguracyjnych Rozwiązaliśmy ten problem, tworząc mały projekt "config", zawiera podfoldery pasujące do środowiska. Skopiuj pliki z podfolderu w zależności od tego, którą kompilację robimy w folderze głównym projektu konfiguracyjnego, podczas każdej kompilacji mi.

Wszystkie inne projekty prowadzą do projektu konfiguracji plików .config. Używamy też częściowych plików konfiguracyjnych, aby zachować szaleństwo powtarzania tych samych informacji przez cały czas w różnych środowiskach.

Nadzieja to pomaga

+1

Wreszcie opublikowano blog na ten temat na http://www.paraleap.com/blog/post/Managing-environments-in-a-distributed-Azure-or-other-other-cloud- based-NET-solution.aspx – Igorek

+0

Jeśli wszystkie rozwiązania wykorzystują ponownie ten sam projekt konfiguracyjny, w jaki sposób radzisz sobie z właściwymi właściwościami konfiguracyjnymi? – Jeff

+0

Czy możesz rozwinąć? – Igorek

6

miałem ten sam wymóg przekształcenia ServiceConfiguration.

poszedłem z odpowiedzią od JMAC, ale miał problemy z przestrzeni nazw w wersji bazowej (dziękuję!):

<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*"> 

po nieco bardziej grzebać znaleźć this Andrew Patterson (dziękuję) .

więc moja wynikające przekształcić plik:

<asc:ServiceConfiguration serviceName="TestCloud2" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:asc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*"> 
<asc:Role name="WebRole1"> 
    <asc:Instances count="1" /> 
    <asc:ConfigurationSettings> 
     <asc:Setting name="LoggingStorage" value="UseDevelopmentStorage=true" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </asc:ConfigurationSettings> 
</asc:Role> 

7

Można użyć CloudConfigurationManager w Azure SDK 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager

zaczyna to patrząc w ServiceConfiguration.cscfg przykład ServiceConfiguration.Cloud.cscfg do konfiguracji. Jeśli go tam nie ma, że ​​wraca do web.config i app.config

Na przykład

CloudConfigurationManager.GetSetting("StorageConnectionString") 

będzie wyglądać w odpowiednim cscfgfile do ustawiania StorageConnectionString, to będzie szukać web.config, a następnie app.config.

Powiązane problemy