Pregunta

Necesitamos la capacidad de enviar correos electrónicos automáticos cuando ocurren ciertas fechas o cuando se cumplen algunas condiciones comerciales.Estamos configurando este sistema para que funcione con un sitio web ASP.NET existente.Charlé con uno de los otros desarrolladores aquí y discutí algunos de los problemas.

Cosas a tener en cuenta:

  • Toda la información que necesitamos ya está modelada en el sitio web ASP.NET.
  • Hay cierta lógica empresarial que se requiere para la generación de correo electrónico y que también se encuentra en el sitio web.

Decidimos que la solución ideal era tener un ejecutable independiente programado para ejecutarse durante la noche y realizar el procesamiento y envío por correo electrónico.Esta solución tiene 2 problemas principales:

  • Si el sitio web se actualizó (lógica o modelo de negocios) pero el ejecutable se perdió accidentalmente, entonces el ejecutable podría dejar de enviar correos electrónicos o, peor aún, enviarlos basándose en una lógica obsoleta.
  • Esperamos usar algo como este utilizar UserControls para crear plantillas para los correos electrónicos, lo cual no creo que sea posible fuera de un sitio web ASP.NET

El primer problema podría haberse evitado con scripts de compilación e implementación (que de todos modos estamos analizando en este momento), pero no creo que podamos solucionar el segundo problema.

Entonces, la solución que decidimos es tener una página ASP.NET a la que SSIS llama regularmente y hacer que realice una cantidad determinada de procesamiento (digamos 30 segundos) y luego regrese.Sé que una página ASP.NET no es el lugar ideal para realizar este tipo de procesamiento, pero parece que cumple mejor con nuestros requisitos.Consideramos generar un nuevo hilo (no del grupo de trabajadores) para realizar el procesamiento, pero decidimos que si lo hacíamos no podríamos usar la página devuelta para indicar un éxito o un fracaso.Al procesar dentro del ciclo de vida de la página, podemos utilizar el contenido de la página para dar una indicación de cómo se realizó el procesamiento.

Entonces la pregunta es:¿Hay algún problema técnico que podamos tener con esta configuración?

Obviamente, si ha probado algo como esto, se agradecerá cualquier informe de éxito o fracaso.Al igual que sugerencias de configuraciones alternativas.

Salud,

¿Fue útil?

Solución

No utilice el hilo asp.net para hacer esto. Si el sitio está generando cierta información que necesita con el fin de crear o activar el correo electrónico a enviar luego tener el sitio de escritura alguna información a un archivo o base de datos.

Crear un servicio de Windows o proceso programado que recoge la información que necesita de ese archivo o db y ejecutar el proceso de envío de correo electrónico en un proceso completamente separada / hilo.

Lo que se quiere evitar es estrellando su sitio o bloquear su envío de correo debido a las limitaciones en el controlador de proceso. Basado en el uso de la palabra "mayor" en el título de la pregunta, los dos necesidad de ser independientes entre sí.

Otros consejos

creo que debe estar bien. Usamos el enfoque similar en nuestra empresa durante varios años y no conseguimos una gran cantidad de problemas. A veces se necesita más de una hora para finalizar el proceso. Recientemente se trasladó el segundo hilo (como usted ha dicho) a un servidor independiente.

Tener el envío de correo y el sitio web acoplados entre sí pueden trabajar, pero no es realmente un buen diseño y el mantenimiento será más para usted en el largo plazo. Usted puede conseguir alrededor de los problemas que Estado al hacer algunas cosas.

  1. Mover la lógica de negocio común a un servicio web o una biblioteca común. Tanto su sitio web y su servicio ejecutable / WCF pueden consumirlo, y centraliza la lógica. Si va a copiar y pegar código, se sabe que hay algo mal;)

  2. Si necesitas un anuncio publicitario de la plantilla, es posible invocar las clases de ASP.NET para crear páginas de forma dinámica (ver el clase BuildManager , y entradas de blog como éste . Si el gestor de correo no se basa en los eventos de página (que no parece a), no debería haber ningún problema para su ejecutable para cargar una clase de página de su sitio web asamblea, construir de forma dinámica, y rellenar el contenido.

Obviamente, esto representa una cantidad significativa de trabajo, pero daría lugar a una solución más escalable para usted.

Parece que usted debe crear un subproceso de trabajo para hacer ese trabajo.

Usted puede y debe construir su cuerpo de mensaje (cuerpo del mensaje con plantilla) dentro de la lógica de dominio (que significa su aplicación asp.net) cuando se cumplen y la envían a un servicio externo que únicamente deben enviar sus mensajes de algunas condiciones de negocio. Todos los mensajes tendrán informaciones adecuadas.

Para "cuando se producen ciertas fechas" escenario puede utilizar solución simple para las tareas de fondo (ver Craig respuesta) y hacer lo mismo que el anterior: la plantilla de análisis, el mensaje de construcción y envío rápido para el servicio especificado .

Por supuesto que debe hacer este seguro, entonces reinicia el grupo de aplicación no rompe sus tareas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top