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
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).
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.
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.
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.
¿Hay algún costo de rendimiento al verificar los valores de configuración web en todo el sitio? – user1572948
@ 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
Gracias por la información, si se leen una vez y en caché no debería ser un problema para mí, entonces – user1572948
- 1. Entorno de desarrollo y producción en PHP
- 2. Uso de Web.config diferente en entorno de desarrollo y producción
- 3. "Perfecto" entorno de desarrollo .NET?
- 4. Xcode - desarrollo condicional o modo de producción
- 5. ¿La mejor manera de capturar errores de JavaScript en producción?
- 6. Symfony2: determinar si un controlador se llama desde un entorno de desarrollo o desde un entorno de producción
- 7. Asegurar contraseñas en el entorno de producción
- 8. Entornos de producción/desarrollo de Tomcat
- 9. ¿Cuál es la mejor manera de configurar un entorno de desarrollo PHP en una Mac?
- 10. ¿Cómo detectar si el entorno está en etapas o producción en la función de trabajador de servicio alojado azul?
- 11. ¿Cuál es la mejor forma de probar el humo de un entorno de producción/producción en Rails?
- 12. Usar DropCreateDatabaseIfModelChanges en un entorno de producción
- 13. Determinar si la aplicación se está comunicando con el recinto de seguridad de APNS o el entorno de producción
- 14. ¿Cómo verificar el desarrollo o la producción en el archivo ERB en Rails?
- 15. ¿Cómo saber si los rieles están en producción?
- 16. copiar rápidamente una base de datos de producción para el entorno de desarrollo (SQL Server)
- 17. Base de datos de desarrollo y producción?
- 18. Compras integradas de iOS: la mejor manera de saber si el usuario ha comprado
- 19. La mejor manera de tala en SSIS
- 20. CSS se representa de manera diferente en el servidor web que en el entorno de desarrollo
- 21. ExecuteScalar devuelve nulo o DBNull (servidor de desarrollo o producción)
- 22. ¿La mejor manera de saber si la aplicación está inactiva en cocoa mac OSX?
- 23. ¿El mejor entorno de desarrollo de "visualización en 3D" para Java? (¿existen incluso?)
- 24. ¿Cómo puedo saber si mi aplicación Django se ejecuta en el servidor de desarrollo o no?
- 25. ¿Cuál es la mejor manera de saber si su perl se ejecuta en -e?
- 26. django-apio en el entorno de producción de varios servidores
- 27. Entornos de desarrollo/producción de SharePoint
- 28. aplicación para iPhone usando el entorno de desarrollo .NET?
- 29. Entorno de desarrollo/prueba/control de calidad ideal para desarrollo
- 30. Anular el correo de ActionMailer a la dirección en el entorno de desarrollo
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