2012-07-18 19 views
5

Nie widzę sposobu, w jaki system Windows Azure umożliwia zmianę konfiguracji aplikacji, gdy nie masz innego wyjścia, jak tylko zachować ustawienia konfiguracji w pliku web.config (lub app.config).Zarządzanie konfiguracją roli Azure

Na przykład ...

Często projekty będą korzystać z 3rd biblioteki partii sprawia, że ​​ciężkie użycia web.config. Korzystanie z web.config może obejmować ciągi połączeń, ustawienia aplikacji lub niestandardowe sekcje konfiguracji. Dobrym tego przykładem jest ELMAH. Plik web.config dla ELMAH może wyglądać tak:

<configuration> 

    <configSections> 
    <sectionGroup name="elmah"> 
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" /> 
     <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 

    <connectionStrings> 
    <add 
     name="MyElmahDatabase" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=tcp:myServer.database.windows.net,1433;Database=myDB;User [email protected];Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" /> 
    </connectionStrings> 

    <elmah> 
    <security allowRemoteAccess="1" /> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyElmahDatabase" /> 
    </elmah> 

</configuration> 

Istnieje kilka problemów tutaj:

  • Nie ma dla mnie sposób aktualizować lub zmieniać czy zdalnego dostępu jest włączony między konfiguracjami usług.

  • Nie ma sposobu, aby zaktualizować lub zmienić ciąg połączenia ELMAH między konfiguracjami usług.

To dlatego, że web.config jest zapakowany jak to w pliku .cspkg i ELMAH nie będzie wyglądać w ustawieniach konfiguracyjnych usług (które są jedynym sposobem mogę zmieniać ustawień konfiguracyjnych między służbą konfiguracjach).

Mogę myśleć o wielu innych przykładów, gdzie jest to problem ...

  • Wszelkie ramy dostępu do danych, które wyglądają bezpośrednio na odcinku ciągów połączenia.
  • Wszelkie niestandardowe ustawienia konfiguracji, które muszę utworzyć.

... aby wymienić tylko dwie.

Czy brakuje mi czegoś lub czy jest to znacząca luka w zarządzaniu konfiguracją oferowaną przez Windows Azure?

EDIT

Z odpowiedzi i komentarze poniżej, wygląda na to, że coś nie jest dobrze obsługiwany. Myślę, że zarządzanie wieloma konfiguracjami kompilacji rozwiązań w celu obsługi różnych profili konfiguracji jest bardzo słabym rozwiązaniem. Nie powinienem musiał odbudowywać rozwiązania dla każdego profilu konfiguracji, którego potrzebuję (prawdopodobnie będzie ich sporo). Kompilacja nie jest równa konfiguracji.

Zastanawiam się, czy istnieje sposób modyfikacji pliku .cspkg, ponieważ jest to tylko plik zip. Zgodnie z dokumentacją this można na Linux.

Szukałem na manifest w pliku .cspkg i wygląda to tak:

<PackageManifest version="2"> 
    <Encryption keytype="1" /> 
    <Contents hashtype="1"> 
    <Item name="MyApp.Web.UI_<GUID>.cssx" hash="AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2" uri="/MyApp.Web.UI_<GUID>.cssx" /> 
    <Item name="MyApp.Web.Services_<GUID>.cssx" hash="7AC81AFF642E4345173C8470C32A41118A4E3CFD4185B82D0ADA44B71057192D" uri="/MyApp.Web.Services_<GUID>.cssx" /> 
    <Item name="SMPackage_<GUID>.csmx" hash="B5E6B83B62AF64C7C11CAC1A394ABBF15D7DB7667A773C5284CE5BE95C5834E9" uri="/SMPackage_<GUID>.csmx" /> 
    <Item name="SDPackage_<GUID>.csdx" hash="F34B7C02A551D82BAD96881E2DA9447D0014D49B47CCB3840475BDC575234A7D" uri="/SDPackage_<GUID>.csdx" /> 
    <Item name="NamedStreamPackage_<GUID>.csnsx" hash="FA2B5829FF5D9B2D69DCDDB0E5BDEE6B8B0BC09FFBF37DAEEE41CF3F3F4D0132" uri="/NamedStreamPackage_<GUID>.csnsx" /> 
    </Contents> 
    <NamedStreams> 
    <Stream name="RequiredFeatures/MyApp.Web.Services/1.0" /> 
    <Stream name="RequiredFeatures/MyApp.Web.UI/1.0" /> 
    <Stream name="SupportData/MyApp.Web.Services/1.0" /> 
    <Stream name="SupportData/MyApp.Web.UI/1.0" /> 
    </NamedStreams> 
</PackageManifest> 

Niestety, gdybym ponownie obliczyć hash niezmienionym „MyApp.Web.UI_.cssx” plik, mój hash różni się od tego w manifeście.

Hash z manifestu: AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2

Moja obliczony hash: E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855

Należy pamiętać, że jeszcze nie zmienił plik, więc mieszania powinna być taka sama.

Sugeruje to, że obliczam nieprawidłowo. Moja metoda była następująca:

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (FileStream fs = new FileStream(args[0], FileMode.Open)) 
     { 
      ComputeHash(new SHA256Managed(), fs); 
     } 
    } 

    private static void ComputeHash(HashAlgorithm hashAlgorithm, Stream stream) 
    { 
     byte[] hash = hashAlgorithm.ComputeHash(stream); 
     string hashString = BitConverter.ToString(hash); 
     Console.WriteLine(hashString.Replace("-", string.Empty)); 
     Console.WriteLine(); 
    } 
} 

Link dokumentacja powyżej, sugeruje, że jest łatwe do ponownego obliczenia skrótu (na Linuksie i tak).

Czy ktoś wie, jak ponownie obliczyć hashe?

+0

Można użyć .cscfg pliki za configurables dla Twojego pakietu. –

+0

To nie zadziała - ELMAH (i inne frameworki) nie będą przeglądać danych konfiguracyjnych przechowywanych w pliku .cscfg. –

+0

Cóż, o ile mi wiadomo, jedyną możliwą metodą konfiguracji pakietu Azure są pliki .cscfg. W przypadku frameworków takich jak ELMAH może być konieczne znalezienie rozwiązania zastępczego, takiego jak zmiana konfiguracji dynamicznie. Ale myślę, że na Stackoverflow jest wielu ekspertów od lazuru, którzy mogą zaoferować znacznie lepszą odpowiedź. To także bardzo interesujące i ważne pytanie. –

Odpowiedz

0

Mam elementy w pliku web.config, które chcesz zmienić w zależności od tego, jak są budowane, istnieje rozwiązanie poza Azure, z którego możesz korzystać. Możesz użyć Web.config transforms. Transformacje te są powiązane z konfiguracją kompilacji, a nie z konfiguracją usługi, ale konfiguracje usług są prawdopodobnie ściśle związane z konfiguracjami kompilacji (... Local.csfg -> Debugowanie ... Cloud.csfg -> Release). Jeśli domyślne konfiguracje kompilacji nie działają dla ciebie, po prostu stwórz te, których potrzebujesz.

Jeśli chcesz użyć różnych definicji za obsługę konfiguracji usługi, to nie jest obsługiwany przez interfejs użytkownika, ale można mess around with the build process to make it work

+0

To może technicznie zadziałać, ale muszę zacząć konfigurować kompilacje dla każdego środowiska. Ta lista może być długa (dev, integracja, test systemu, UAT, produkcja) i każda dodatkowa konfiguracja kompilacji musi zostać zbudowana, co zwiększa czas kompilacji. Chciałbym mieć kompilację Debug i kompilację Release i móc wdrożyć dowolne z nich w dowolnym środowisku. –

+0

Bez względu na to, jakiego rozwiązania używasz, jeśli chcesz mieć inny plik web.config dla każdego środowiska, musisz mimo to zrobić kompilację na środowisko, ponieważ plik web.config jest częścią pakietu. Po utworzeniu pakietu nie można go zmienić. – knightpfhor

+0

Nie jestem pewien, czy to w pełni prawda - w konfiguracji kompilacji "Debugowanie" mogę mieć "n" liczbę konfiguracji usług. Domyślnie są to "Lokalne" i "Chmura", byłoby świetnie, gdybym mógł mieć "Lokalne", "Cloud-Integration", "Cloud-SystemTest", "Cloud-UAT" itp. I że mogę zmieniać pliki konfiguracyjne dla każdej z tych konfiguracji usług.Nie widzę powodu, dla którego powinienem przebudować całe rozwiązanie tylko po to, aby poradzić sobie z dodatkowymi profilami konfiguracji - kompilacja nie jest równa konfiguracji. –

2

przechodzącą Stream do ComputeHash() kończy się z innym hash w porównaniu z korzystaniem przeciążenie byte[] . Nie wiem dlaczego.

Spróbuj czegoś takiego:

private static void ComputeHash(HashAlgorithm hashAlgorithm, Stream stream) 
{ 
    BinaryReader reader = new BinaryReader(stream) 
    byte[] hash = hashAlgorithm.ComputeHash(reader.ReadBytes((int)stream.length)); 
    string hashString = BitConverter.ToString(hash); 
    Console.WriteLine(hashString.Replace("-", string.Empty)); 
    Console.WriteLine(); 
} 

To daje hash jesteś po.

Jak już zapewne już odkryte, na linux można uzyskać trawienie

openssl dgst -sha256 /path/to/file 
Powiązane problemy