microsoft - porta azure
Mejores prácticas de la cadena de conexión de Azure (5)
Tengo una aplicación que estoy migrando a Azure. Actualmente utilizo la transformación web.config para gestionar el cambio de la base de datos que conecta los entornos dev / staging / prod de cadenas. ¿Cómo es mejor administrar estas múltiples cadenas de conexión en Azure?
En los casos en que no importa si el desarrollador puede ver las credenciales de producción, puede usar las transformaciones de configuración integradas de Visual Studio 10. Si esto es lo que estás buscando, sigue estos pasos:
1. Navegue a su carpeta de proyecto de Azure en el explorador de archivos
2. Haga una copia de ServiceConfiguration.cscfg
3. Cambie el nombre de la copia a ServiceConfiguration.Base.cscfg
4. Para cada configuración de construcción (por ejemplo, Dev, Staging, Production), cree un archivo ServiceConfiguration. <Build config name> .cscfg. En estos archivos, puede usar la sintaxis de transformación de configuración normal
5. Abra su archivo .ccproj en un editor de texto
6. Encuentra el siguiente nodo,
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>
y reemplázalo con esto (tendrás que editar este bloque para que coincida con tus configuraciones de compilación):
<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.Agregue lo siguiente al final del archivo .ccproj, justo arriba de </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.Si está usando un servidor de CI que no tiene instalado Visual Studio 10, probablemente tenga que copiar la carpeta C: / Archivos de programa / MSBuild / Microsoft / VisualStudio / v10.0 / Web y su contenido de una máquina de desarrollo para el servidor.
Actualización: como se noted @SolarSteve, es posible que deba agregar un espacio de nombres a sus archivos ServiceConfiguration. *. Cscfg. Aquí hay un ejemplo de 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>
Personalmente nosotros:
- Eliminado las transformaciones de configuración web por completo.
- La configuración se recupera de cscfg.
- La versión de desarrollo de cscfg apunta al entorno de desarrollo local (que está almacenado en el control de versiones).
- Durante la implementación en producción, proporcionamos credenciales seguras para producción SQL Azure y almacenamiento.
Para ver una muestra de la clase de gestión de configuraciones que escanea la configuración de la aplicación y el entorno de la nube para los valores de configuración, puede consultar el código abierto Lokad.CQRS para el proyecto de Windows Azure (consulte CloudSettingsProvider)
Puede usar CloudConfigurationManager en Azure SDK 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager
Esto comienza buscando en ServiceConfiguration.cscfg eg ServiceConfiguration.Cloud.cscfg para la configuración. Si no está allí, vuelve a web.config y app.config
Por ejemplo
CloudConfigurationManager.GetSetting("StorageConnectionString")
Buscará en el archivo cscfg apropiado para la configuración StorageConnectionString, luego buscará en web.config y luego en app.config.
Tenía el mismo requisito para transformar ServiceConfiguration.
Recibí la respuesta de jmac (¡gracias!), Pero tuve problemas con el espacio de nombres en la versión Base:
<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
después de un poco más de poking encontró this por Andrew Patterson (Gracias).
entonces mi archivo de transformación resultante:
<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>
Tenemos varios entornos (desarrollo local dentro de la estructura dev, desarrollo local fuera de la estructura de desarrollo, prueba, lanzamiento, que tiene 2 versiones: lanzamiento / producción y lanzamiento / puesta en escena y 20 proyectos, algunos de los cuales necesitan cierta variabilidad en la configuración de configuración. problema al crear un pequeño proyecto de "configuración", incluidas las subcarpetas que coinciden con los entornos. Copiamos archivos de la subcarpeta en función de la compilación que estamos haciendo en la carpeta raíz del proyecto de configuración, durante cada compilación.
Todos los demás proyectos se vinculan al proyecto de configuración para archivos .config. También utilizamos archivos de configuración parcial para mantener la locura de repetir la misma información todo el tiempo en varios entornos.
Espero que esto ayude