No veo cómo Windows Azure le permite variar la configuración de una aplicación cuando no tiene otra opción que mantener la configuración en web.config (o app.config).Administración de configuración de roles Azure
Por ejemplo ...
Muy a menudo los proyectos hará uso de una biblioteca tercera parte que hace un uso intensivo de web.config. El uso de web.config puede involucrar cadenas de conexión, configuración de la aplicación o secciones de configuración personalizadas. Un buen ejemplo de esto es ELMAH. Un archivo web.config de ELMAH podría ser como la siguiente:
<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>
Hay un par de problemas aquí:
No hay manera para mí para actualizar o modificar si el acceso remoto está habilitado entre configuraciones de servicio.
No hay forma de que actualice o modifique la cadena de conexión ELMAH entre Configuraciones de servicio.
Esto se debe a que el web.config se empaqueta como es en el archivo .cspkg y ELMAH no mirará a los ajustes de configuración de servicios (que son la única manera de que pueda variar entre los valores de configuración de servicio Configuraciones).
puedo pensar en muchos otros ejemplos en los que este es un problema ...
- Cualquier marcos de acceso a datos que se ven directamente en la sección de cadenas de conexión.
- Cualquier configuración de configuración personalizada que necesite crear.
... para nombrar solo dos.
¿Me falta algo o es una brecha importante en la administración de la configuración que ofrece Windows Azure?
EDITAR
De la respuesta y comentarios a continuación, parece que esto es algo que no está bien sujeto. Creo que gestionar múltiples configuraciones de compilación de soluciones para soportar diferentes perfiles de configuración es una solución muy débil. No debería tener que reconstruir la solución para cada perfil de configuración que necesito (es probable que haya bastantes). La compilación no es igual a la configuración.
Me preguntaba si había una forma de modificar el archivo .cspkg ya que es solo un archivo zip. De acuerdo con la documentación this que puede en Linux.
He mirado en el manifiesto en el archivo .cspkg y se ve así:
<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>
Por desgracia, si me re-calcular el hash de la inalterado "MyApp.Web.UI_.cssx" archivo, mi hash es diferente del que está en el manifiesto.
Hash de manifiesto: AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2
Mi hash calculado: E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
Tenga en cuenta que todavía no he cambiado el archivo, por lo que el hash debe ser el mismo.
Esto sugiere que estoy calculando mal. Mi método es el siguiente:
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();
}
}
El enlace de la documentación anterior, sugiere que es fácil de volver a calcular el hash (en Linux de todos modos).
¿Alguien sabe cómo volver a calcular los hash?
Se puede utilizar para cualquier .cscfg archivos configurables para su paquete. –
Eso no funcionará - ELMAH (y otros marcos) no examinará los datos de configuración que se guardan en .cscfg. –
Bueno, por lo que yo sé, solo el posible método de configuración para el paquete azul son los archivos .cscfg. Para los marcos como ELMAH, puede que tenga que encontrar una solución alternativa como cambiar la configuración de forma dinámica. Pero creo que hay muchos expertos de azul en Stackoverflow que podrían tener una respuesta mucho mejor para ofrecer. También esta es una pregunta muy interesante e importante. –