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?
Można użyć .cscfg pliki za configurables dla Twojego pakietu. –
To nie zadziała - ELMAH (i inne frameworki) nie będą przeglądać danych konfiguracyjnych przechowywanych w pliku .cscfg. –
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. –