Requerimos que en una aplicación ASP.Net, se debe invocar un proceso .Net todos los días a una hora automáticamente Este proceso necesita interactuar con la base de datos (SQL Server 2005) y generar facturación diariamente. Estamos utilizando un alojamiento compartido, por lo tanto, no podemos crear un servicio de Windows o crear trabajos de SQL Server. ¿Cómo se puede lograr esto sin la intervención del usuario?¿Hay alguna manera de ejecutar un proceso todos los días en una aplicación web .Net sin escribir un servicio de Windows o trabajos de servidor SQL?
Respuesta
Usted podría intentar the technique described here, utilizado en stackoverflow sí mismo (o al menos se utiliza aquí en un punto). En pocas palabras:
- En el inicio, añadir un elemento a la HttpRuntime.Cache con un de vencimiento fijo.
- Cuando caduque el elemento, haga su trabajo, como WebRequest o qué tiene usted.
- Vuelva a agregar el elemento a la memoria caché con una caducidad fija.
Para conseguir que se ejecute en un momento específico en lugar de un intervalo, se podría reducir el intervalo y simplemente modificar su método de trabajo para comprobar el tiempo mismo.
Como los comentarios en el artículo original vinculado anteriormente nota, esto no es una solución perfecta, y nadie debe preferir que a través de una técnica de programación adecuada si hay uno disponible. Ver When Does Asp.Net Remove Expired Cache Items? para algunas calificaciones adicionales.
Siempre se puede programar una tarea para ejecutar un servicio web ..
http://weblogs.asp.net/jgalloway/archive/2005/10/24/428303.aspx
El planificador se ejecute un archivo VBS con la siguiente ..
Set oServerXML = CreateObject("Msxml2.ServerXMLHTTP")
oServerXML.Open "GET","http://my.hostedservice.com/myService.asmx/myService?aParam=Value
oServerXML.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
oServerXML.Send
Set oServerXML = nothing
dijo que está en hosting compartido, por lo que no hay manera de acceder a la programación de Windows –
La tarea programada se ejecutará en otro servidor. – madcolor
Si está en otro servidor, también funcionará –
Se puede utilizar una tarea programada , pero esto podría no funcionar en un entorno de alojamiento compartido tampoco.
Puede configurar un servicio web o una página en su sitio web para iniciar el proceso, luego haga que una tarea programada en una computadora de escritorio acceda a esa página/servicio una vez al día para iniciar el proceso. Hacky, pero podría funcionar.
No se puede hacer, por desgracia.
IIS solo responde a las solicitudes, y SQL Server solo se activa para las tareas.
Lo más cerca que podrá hacer es poner su rutina en una página ASPX, no vinculada desde el sitio y no con un nombre obvio, y desencadenarla mediante una solicitud desde alguna otra máquina en Internet.
La otra máquina podría ser Windows, Linux, Mac, lo que sea que tenga disponible, y todas esas plataformas tienen formas de programar eventos (servicio, cron, etc.) que pueden hacer que la solicitud active la actualización en el servidor.
Sí, use Windows Scheduler. Según cómo esté configurado, es posible que deba iniciar sesión para que se ejecute el planificador.
en el alojamiento compartido. No hay manera de acceder a la programación de Windows –
. Pero existe la opción de colocar un servicio web en el entorno de alojamiento y luego tener un cuadro externo siempre activado invocarlo. –
Siendo .NET ignorante, me imagino que hay algún tipo de planificador basado en .NET disponible para esto (al igual que Quartz para Java).
O simplemente podría disparar un hilo de larga duración que pasa la mayor parte del tiempo durmiendo, despertarse cada minuto, controlar la hora, consultar su lista de "cosas que hacer", disparar los que necesitan ser hecho. El nivel de sofisticación debe ser tan alto como lo desee, pero el objetivo principal es mantener el hilo de programación primaria "vivo", "a toda costa".
lo que puedo pensar ahora son:
Crear una DLL que contiene la lógica programación que desea, y crea seguro de que esta función de programación DLL no se detendrá y se repetirá para siempre, entonces necesitará una página en ese servidor esta página activará estas funciones dll . "Deberá llamar al esta página al menos una vez para iniciar el planificador ".
Crear una aplicación "sostiene la lógica de programación" en la otra máquina, puede ser el PC de casa, y hacer su aplicación para PC llamar a las funciones del servidor a través de servicios web o páginas
Hay maneras de ejecutar "servicios" en .Net utilizando caducidad de caché para desencadenar la tarea.
- 1. Ejecutar un servidor web Python como un servicio en Windows
- 2. ¿Hay alguna manera de atrapar todos los errores en un servicio web AJAX?
- 3. ¿Existe alguna manera sencilla de proporcionar una aplicación web o servicio web basado en Matlab?
- 4. ejecutar un servicio de Windows como una aplicación de consola
- 5. iniciando un proceso desde un servicio Windows .NET
- 6. ¿Hay alguna manera de ejecutar dinámicamente una cadena en .net, similar a eval() en javascript o sql dinámico en sql?
- 7. ¿Hay alguna manera de configurar Fiddler para interceptar llamadas HTTP desde un servicio de Windows?
- 8. ¿Hay alguna manera de contar todos los elementos de un índice en ElasticSearch o Tire?
- 9. Ejecutar una aplicación WPF como un servicio de Windows
- 10. ¿Alguna manera de anular el nombre de servicio de Windows .NET sin volver a compilar?
- 11. ¿Cómo puede un servicio de Windows ejecutar una aplicación GUI?
- 12. Trabajos del Agente SQL Server: Cómo ejecutar un paso de trabajo sin ejecutar todo el trabajo
- 13. ¿Hay alguna alternativa de trabajos de Cron?
- 14. ¿Hay alguna manera de ver el origen de una página web DESPUÉS de ejecutar todos los scripts de jquery?
- 15. ¿Hay alguna manera de ejecutar la aplicación GUI de forma sin cabeza en Mac?
- 16. ¿Hay alguna manera de obtener trazas de pila .net en Sql Profiler, o una herramienta similar?
- 17. ¿Hay alguna manera de usar java.util.Preferences en Windows sin usar el Registro como servidor?
- 18. ¿Hay alguna manera, en Java, de verificar el estado de un servicio de Windows?
- 19. ¿Incrustar un servidor web liviano en una aplicación .net (node.js)?
- 20. Iniciar un proceso con credenciales de un servicio de Windows
- 21. ¿Cómo asegurar un servicio web en .net?
- 22. ¿Hay alguna manera rápida de, al depurar, detenerse en un mensaje o API específico de Windows?
- 23. Cómo instalar un servicio de Windows .NET sin InstallUtil.exe vb.net
- 24. Cómo ejecutar IIS Express como un proceso iniciado a través de un servicio de Windows
- 25. ¿Hay alguna manera de probar un sitio web en el iPhone sin un iPhone?
- 26. ¿Cómo detener correctamente un servicio de Windows .NET multiproceso?
- 27. ¿Hay alguna diferencia entre un servidor web y un servicio web?
- 28. ¿Cómo puedo ejecutar un php sin un servidor web?
- 29. ¿Hay alguna manera de marcar o vincular a una sección de una página sin un ancla?
- 30. ¿Hay alguna forma de bloquear un proceso en una CPU?
Los tiempos de caducidad fijos no son fijos ... solo * en realidad * caducan cuando intenta ACCEDER al ítem en caché nuevamente. Eso está bien para un sitio de tráfico constante como SO, pero no es confiable para sitios donde no se puede depender del tráfico para hacer ping al sitio lo suficientemente cerca después de la caducidad (y pulsar el elemento de caché para que caduque) para realizar el trabajo cuando necesito. – richardtallent
@richardtallent: eso no es correcto, aunque el mecanismo de caducidad de la caché es más complicado de lo que pensaba y requiere más consideración antes de usarlo a ciegas. Vea el enlace que agregué a mi respuesta para más detalles. –
@jeff: ¡lee tu enlace ayer, excelente investigación! – richardtallent