5

Me gustaría enviar correos electrónicos de forma diferente sobre la producción que sobre el entorno de desarrollo, como enviarme correos electrónicos solo durante la prueba. Sé que puedo establecer un valor de aplicación en el archivo webconfig o verificar la URL antes de enviar los correos electrónicos. Me gustaría saber cuál es la mejor práctica para hacer esto o si hay alguna otra opción que no sepa que podría ser mejor. Cualquier información sobre este tema sería muy apreciada.La mejor manera de saber si en el entorno de producción o desarrollo en .NET

Respuesta

3

Uso lo que se llama Preprocessor Directives (in C#). En VB solo se llama Directives.

que tienen un método de ayuda como esto:

public static bool IsDebug() 
{ 
    #if DEBUG 
     return true; 
    #else 
     return false; 
    #endif 
} 

A continuación, en cualquier parte del código se puede llamar a este método y durante el tiempo de ejecución y va a saber si el código se ejecuta en Debug (desarrollo) o si es la versión Release (producción).

Esto es el equivalente #If...Then...#Else Directives in (VB).

1

En lugar de cambiar su código, ¿por qué no configurar el servidor de correo de desarrollo de correo sólo a usted, independientemente del campo Dirección?

Parece mejor que escribir código para hacer eso.

+0

Gracias, sí, pude configurar el smtp en el IIS. Creo que también podría configurarlo para almacenar correos electrónicos en una carpeta en lugar de enviarlos. – user1572948

1

Bueno, sólo usted puede determinar lo que es la producción y lo que es el desarrollo, por lo que una bandera en el web.config está bien, pero una solución más elegante implicaría un patrón como Dependency Injection (DI) ala Spring.Net, StructureMap y Castle Windsor por nombrar pocos.

El concepto clave detrás de DI es desacoplar/aislar variaciones en una implementación al proporcionar dinámicamente información sobre qué clase instanciar en el tiempo de ejecución. En este caso, por ejemplo, todo su código se escribiría para tratar con una interfaz de 'correo' (sin tener en cuenta si es entorno prod o dev) y se configuraría su marco DI para crear una instancia de la versión de producción o de desarrollo de un clase de implementación de correo. Es un poco más limpio porque no expones ni proliferas los valores de los parámetros de configuración.

Sin duda hay una curva de aprendizaje allí, por lo que puede no ser viable en esta etapa de su proyecto, pero definitivamente algo a tener en cuenta.

1

Puede usar web config inheritance de IIS para permitir que su aplicación 'herede' la configuración de contexto global del entorno respectivo en el que se implementa.

En un directorio principal de donde se ha instalado la aplicación .NET (por ejemplo /inetpub/wwwroot.web.config, o incluso la raíz web.config (\Windows\Microsoft.NET\Framework\ver\web.config), añadir el entorno de configuración específica, por ejemplo

En PROD

<appSettings> 
    <add key="sendMailTo" value="" /> 
    <add key="environmentName" value="PROD" /> 
    </appSettings> 
En

DEV

cada
<appSettings> 
    <add key="sendMailTo" value="[email protected]" /> 
    <add key="environmentName" value="DEV" /> 
    </appSettings> 

Estos ajustes de contexto medio ambiente no se despliegan volver a implementar la aplicación. Además, todas las demás aplicaciones se despliegan en una y nuestros servidores también pueden heredar estas configuraciones.

+0

¿Hay algún costo de rendimiento al verificar los valores de configuración web en todo el sitio? – user1572948

+0

@ user1572948 Las AppSettings se leen una vez y se almacenan en caché, sin embargo, otras mejoras de rendimiento son posibles al parecer http://stackoverflow.com/questions/1304897/asp-net-web-config-appsettings-performance – StuartLC

+0

Gracias por la información, si se leen una vez y en caché no debería ser un problema para mí, entonces – user1572948

Cuestiones relacionadas