Pregunta

Tenemos un sitio web en el que necesitamos un programador para recibir notificaciones (correo electrónico) en el tiempo determinado. p.ej. una persona del ajuste de aviso a las 5 pm para asistir a la reunión a las 4:45 de la tarde, recibirá un correo electrónico a las 4:45 pm sobre el mismo.

Como este sitio está alojado en un servidor compartido, no tenemos ningún control sobre el servidor para ejecutar cualquier aplicación de empleo SQL o planificador.

¿Hay algo en asp.net que puede ayudar en este escenario?

¿Fue útil?

Solución

¿Qué tal esto: Simular un servicio de Windows usando ASP.NET para ejecutar los trabajos programados .

En un momento dado se utiliza esta técnica en desbordamiento de pila , aunque no creo que es más.

Para ser honesto que parece un truco desagradable, propenso a errores para mí, pero si no es capaz de ejecutar cualquier cosa en el servidor, excepto su sitio web, entonces algo como esto es probablemente su única opción.

Otros consejos

Es necesario tener un trabajo hecho en el servidor, pero no tiene buena manera de desencadenar desde ASP.NET?

¿Qué hay de la creación de una página web que va a comenzar su trabajo, y tienen una carrera temporizador en otro lugar (es decir. En otro equipo) que solicita esa página. (Sólo golpear la página para activar le empleos)

Yo tenía el mismo problema que tú y yo terminamos con una programación de un servicio que utilice Quartz.NET: http: //quartznet.sourceforge.net/ y conectarse a la misma base de datos del sitio web.

Con ASP.NET no se garantiza que su aplicación está vivo en todo momento, y por lo tanto aplicaciones web como un proceso de host para una solución de programación no es factible la OMI.

Un servicio de Windows es lo que necesita para este escenario. Usted tiene el control total sobre cómo iniciar y detener el proceso, así como las formas de control de la aplicación.

¿Es capaz de albergar un servicio de este tipo en una máquina diferente? Incluso si la aplicación Web se ejecuta en un servidor alojado no significa que tenga que ejecutar el planificador en el mismo servidor.

Si realmente no tiene control sobre el servidor (es decir, no se puede utilizar un trabajo de SQL, una tarea programada, o instalar un servidor de ventanas), entonces se puede usar un System.Threading.Timer que inicializar en su Global.asax (por ejemplo, en el inicio de la aplicación) que invoca una cierto método en su aplicación cada x minutos. Este método sería entonces consultar su base de datos y ver qué notificaciones deben enviar.

Esto no es realmente un enfoque deseable, sin embargo, que el temporizador no está garantizada para invocar siempre por lo que yo sé, ya que, al igual que Pedro dice, su aplicación web no está garantizada para estar vivo en todo momento.

Sin embargo, dependiendo de sus necesidades, todavía puede ser un 'suficientemente bueno' si no tiene otras opciones.

Sin embargo, si realmente son completamente atascado y no tienen más remedio que acoger en su aplicación web,

Se podría mirar a la creación de una instancia System.Timers.Timer en su archivo Global.asax.cs. Cable de hasta transcurrido un evento como lo haría normalmente, y darle un poco de código que hace algo en la línea de

protected void myTimer_Elapsed(object sender, EventArgs e)
{
    if(System.DateTime.Now Falls in Some Configured Time-Window)
        //Do Stuff
}

Pero, como alguien señaló, no es garantizado como IIS podría estar restableciendo durante ese período, en cuyo caso te lo perderás.

En realidad no es deseable hacerlo, pero se puede hacer lo Razzie está sugiriendo. He visto hacer muchas veces. Aunque feo, ya veces simplemente tienen que hacer los cortes feos.

El uso de este método, sin embargo, usted tiene que asegurarse de que la aplicación no se descarga. Por lo que necesita algún tipo de mantener vivo. Yo sugeriría la creación de una herramienta de monitoreo web que se tire constantemente una página (aspx) para mantener la aplicación viva. Estos chicos son libres http://mon.itor.us/

  

No te belive, porque la fuente   código de Quartz.Net (1.0 y 1.0.1)   no se compila en Visual   Studio.Net 2005 y 2008. La única manera de   para obtener Quartz.Net es utilizar toda   Spring.Net paquete, que compila   muy bien debajo de VS.Net 2005 y 2008

     

A menos que usted podría compartir algunos consejos, cómo   para compilar y utilizar en Quartz.dll   proyecto asp.net! (Página web de   Quartz.Net y léame.txt no lo hace   proporcionar ninguna información sobre la fuente   compilación coude) Cada consejo es   bienvenida!

tuve problemas al principio también, pero esto es debido a que el AsemblyInfo.cs necesaria está contenida en la carpeta principal. Además, tendrá que añadir los tres archivos DLL que se incluyen.

No te belive, ya que el código fuente de Quartz.Net (1.0 y 1.0.1) no se compila en Visual Studio.Net 2005 y 2008. La única manera de conseguir Quartz.Net es utilizar toda la primavera paquete de .NET, que compila bien bajo VS.Net 2005 y 2008

A menos que usted podría compartir algunos consejos, como compilar y utilizar Quartz.dll en el proyecto asp.net! (Página web de Quartz.Net y léame.txt no proporciona ninguna información sobre la compilación coude fuente) Cada punta es bienvenida!

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