2011-05-10 12 views
6

Tengo un proyecto ejecutándose en 2 servidores. 1 servidor de pruebas con una conexión a un testDB, y uno en el servidor real, con DB real.valor estático en web.config

Lo único diferente en cada una de las instancias en ejecución de este proyecto es el web.config.

Lo que me gustaría hacer es tener la posibilidad de establecer un valor en web.config, un bool, que luego podría ser leído por el código. Este bool sería cierto si la aplicación está en modo de prueba. Lo configuré manualmente, el proyecto luego lo leería, y cuando fuera cierto, los correos que la aplicación enviaría, se mantendrían internos, para que las personas no reciban el correo. Lo hice antes con la configuración de public static bool en global.asax, pero en Asp.net MVC todo está integrado en una DLL, por lo que no puedo cambiarlo en el servidor desplegado en ese caso.

¿Esto es posible? o habría una buena otra solución?

Respuesta

16

Como los otros han dicho que esto es lo que la sección appSettings de su web.config es para

<configuration> 
    <appSettings> 
    <add key="isInTestMode" value="true"/> 
    </appSettings> 
    ... 
</configuration> 

que luego se puede acceder mediante la WebConfigurationManager

bool isInTestMode = Boolean.Parse(WebConfigurationManager.AppSettings["isInTestMode"]); 

Sin embargo

Si sólo está interesado en no enviar mensajes de correo electrónico cuando se prueba, a continuación, puede utilizar la web. config para configurar .NET para volcar los correos electrónicos a un directorio local en lugar de enviarlos al servidor de correo

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="SpecifiedPickupDirectory"> 
     <specifiedPickupDirectory pickupDirectoryLocation="C:\MailDump\" /> 
     <network host="localhost"/> 
    </smtp> 
    </mailSettings> 
    ... 
</system.net> 

Esto funcionará si su código no anula la configuración predeterminada del servidor SMTP de correo.

2

¿Por qué no usa appSettings?

<configuration> 
    <appSettings> 
     <add key="myValue" value="true"/> 
    </appSettings> 
     .... 
0

ASP.Net WebDeploy le permite transformar automáticamente su web.config en función de dónde se está implementando. por ejemplo, puede enviar una cadena de conexión cuando se implementa en el servidor de prueba y una cadena de conexión diferente cuando se implementa en el servidor activo.

http://www.iis.net/download/WebDeploy

3

Sí se puede:

<configuration> 
    <appSettings> 
    <add key="TestingMode" value="True" /> 
    </appSettings> 
    ... 
</configuration> 

Se puede conseguir utilizando algo como esto:

static public String GetWebConfigKey(string appSettingsKey) 
    { 
     String value = ""; 

     System.Configuration.AppSettingsReader asr = new System.Configuration.AppSettingsReader(); 

     try 
     { 
      value = asr.GetValue(appSettingsKey, System.Type.GetType("System.String")).ToString(); 
     } 
     catch (KeyNotFoundException knfe) 
     { 
      throw new KeyNotFoundException("KeyNotFoundException occured in UtilityLibrary.WebConfig.getWebConfigKey" + knfe.Message); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 

     return value; 
    } 

Me suelen utilizar una enumeración de las llaves de aplicaciones para mantenerlos firmemente tipeado y hace que sea más rápido y fácil de buscar en lugar de buscar en la web.config

+0

Que capturar la excepción general es un mal ejemplo, cómo no detectar excepciones. ¿Cuál es su beneficio? Tienes excepciones de todos modos, solo que sabes menos sobre eso ... – Martas

1

Puede utilizar su web.config para ello, utilizando appSetting (ConfigurationManager.AppSetting [ "clave"])

O, si yuor aplicación se ejecuta en modo de depuración en el servidor de prueba se puede hacer esto,

#if (DEBUG) 

//Debug 

#else 

    //Live 

#endif 
0

Si está usando Visual Studio 2010, recomendaría el uso de archivos de transformación para transformar el archivo web.config. Cuantas más diferencias tenga, más le ayudará esto.

los pasos de alto nivel:

  1. Crear una nueva configuración de generación a través del administrador de configuración
  2. Ajuste los valores según sea necesario en cada archivo de configuración recién creada
  3. crear y publicar
  4. hecho y nunca tienen que recuerde cambiar los valores en múltiples archivos de configuración (desarrollo, puesta en escena, lanzamiento, etc.).

http://msdn.microsoft.com/en-us/library/dd465318.aspx