In PHP we have cron jobs, where the hosting server automatically picks up and executes a task as per the schedule given.
What would be a good alternative to use for CRON jobs in ASP.NET? I'd like to use a Web service, but that will not work in a shared hosting environment. Any help would be appreciated, and please advise a way to do this specifically in a shared hosting environment.
Try Quartz.NET. It's a decent .NET scheduler which supports CRON expressions, CRON triggers and various other means and methods to schedule tasks to be performed at certain times / intervals.
It even includes a basic Quartz.NET server (Windows Application) that might fit your needs.
Edit:
If you can't run applications or windows services within your shared hosting then perhaps something like "Easy Background Tasks in ASP.NET" will do you? It simulates a Windows Service using HttpRuntime.Cache and removes the need for any external dependancies.
Another option is to use hangfire which says about itself
An easy way to perform background processing in .NET and .NET Core applications. No Windows Service or separate process required.
Backed by persistent storage. Open and free for commercial use.
Requirements (as of November 2019) are
.NET Framework 4.5
Persistent storage, e.g. an SQL database where Hangfire will write 10 tables
Newtonsoft.Json library ≥ 5.0.1
Assuming that you have already some API project which runs as service, you can use hangfire within.
Disclaimer: I am not affiliated in any kind with hangfire, I will just be using it soon.
This is absolutely a hack, but you can simulate a cron service using ASP.NET callbacks. Here is an example of how to do it.
nCron is a .Net implementation of CRON using nCronTabs which are the exact same as cron scheduling
Asp.Net and Web services are typically responsive. They wait and respond to requests. There are hacks to make them look like schedulers but the hacks are ugly beyond belief.
You could use a Windows Service.
Or write an executable and use the Windows Task Scheduler.
Related
I'm using C#.
I think thats a noob question but i'm try anyway.
I have a C# project with methods: X(),Y(),Z().
I'm looking for a task scheduler that run for me every day/every hour my methods (X(),Y(),Z()) at diffrent times.
What is the best way to do that?
Just make a console application that accepts a single parameter (think myapp.exe x) that would call respective function. Then add a number of scheduled tasks to Windows Scheduler and you'll be all set.
The easiest way is to use an existing library. Scott Hanselman had a blog on this a while back http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx.
Note: the article mentions asp.net however the schedulers are mentioned can also be run through console or Windows apps.
I personally use the Fluent scheduler (https://github.com/fluentscheduler/FluentScheduler) which has now been updated to support .net core. It's easy to use, and if you have simple scheduling requirements probably the one I'd recommend.
If you want to run some code every hour, every day or any other clearly known period, then the best option is to create a console application and use Windows Task Scheduler to run this application.
If this period is unclear and depends on some logics or calculations, then the best option is using always-running Windows Services which will run your methods when necessary.
If your application is always run, you can try with reactive extensions:
Observable.Timer(TimeSpan.FromSeconds(5)).Subscribe(x=>X());
Check here for more infohttps://msdn.microsoft.com/en-us/library/hh242977(v=vs.103).aspx
I would make a windows service, and in the windows service you can call your methods with a timer check. (we did it so in our old company)
My website needs to somehow do something every few minutes.
Essentially I get projects from another website. I then call one of my web pages and update.
Currently I'm making a console app for this but I'm wondering if there is a better way.
Thanks
There are super cool, open source tool exist for creating a scheduled jobs in .NET
It called Quartz.NET.
I think currently is #1 tool for that tasks.
Use windows task scheduler to run the console app your writing at the appropriate times.
Depending on what needs to be done, there are a few options.
This can be achieved by a timer in a windows service.
Using the HttpCache expiration callback feature (not recommended, it is a hack).
Use a Sql job (assuming data is changing).
Building upon #Ph0en1x answer, there already is a Stackoverlow question on how to use Quartz.Net in ASP.Net
I would like to create an auto email distributor application by C# for my company.
Usually, I would create a console application and set up a schedule to run this program from server task scheduler.
Is there any ways to build this kind of application other than console application? And what is the benefit of it compared to console application.
It can be done with every application type. Asp.net\Silverlight\WCF\WPF\WinForm...
Console Application is the easiest way because
It doesn't have a UI layer(or almost doesn't have...).
No configurations are required.
If you have a robust scheduling application (such as task scheduler), there is little point to rebuilding this inside your application. If the scheduling application is not sufficient for your needs, you'll need to embed that logic in your app.
Either way, a console application is fine. The latter scenario will just require more configuration (in the form of a configuration file probably). Still no need for a UI unless the config is complex.
You may write a Service. Writing a Service in .Net is too easy and straight forward and then you need to use a timer to invoke the operation on schedules.
A service will be executed in the background and can be configured to be executed as soon as the computer turns on.
Because services do not have user interface, you need to feed them with the requests using a database or a messaging system.
Windows schedule of a console application is ok.
If your schedule is continuous (every minute) you might be better off a Windows service see Here.
See this stackoverflow question for the comparison HERE
I'm trying to find a very easy easy way to start a simple cron job for my Web Application. What I was thinking about is starting a Task in the Application_Start event. This task will have a while loop and do some action every hour or so like a normal cron job would do.
Is this a good idea or will this give some trouble?
Some of the problems I could think of are the following:
The Task suddenly stops working or hangs. Maybe make some fail over
mechanism that would check if the task is still running and if not
restart it.
Memory leaking if the Task totally goes wrong and I have to restart
the whole application.
No control in changing the Task on the fly but this shouldn't be a
problem for the thing I want to do but for others it might be.
Does someone have any suggestions or experiences with trying this?
Although Darin says that doing cron jobs in a web application is a bad idea (and I agree with him in some way), it may be not so bad, when used wisely and for short running jobs.
Using same Quartz.NET in web application may be quite nice, I'm using in one of my projects like this
http://bugsquash.blogspot.com/2010/06/embeddable-quartznet-web-consoles.html for small jobs and it is running nice - it's easy to monitor (easier than monitoring remote windows process), may be used on shared hosting.
Doing cron jobs in a web application is a bad idea. IIS could recycle the application at any time and your job will stop. I would recommend you performing this in a separate windows service. You could take a look at Quartz.NET. Another possibility is a console application which does the job and which is scheduled within the Windows Scheduler.
I'm writing a small app that needs to be executed once a week.
I could write it as a service that runs constantly but only executes the task that I need it to once a week, but that seems like overkill.
Is there another way of executing an application once every x period of time?
I'm looking for a solution that doesn't involve user interaction.
You can always use Windows Scheduled Tasks. They can be ugly, but effective.
You could use the Windows Task Scheduler. It was designed with this scenario in mind.
You can use Windows Scheduler for planning execute app once a week.
Under windows you can use the at utility.
You can use the Windows Task Scheduler in the Control Panel. Just set up a task to run your application on the specified day. You can even tell it to run as a certain user if you want.
If you need full control on the process (result values, parameters to be provided, etc), I would suggest you to create your own task scheduler, where you can use the cron algorithm to schedule the time you want execute your task.
I know it may sounds overkill to create a service to run once a week, but if you make a generic scheduler, you will be able to reuse your schedule for other purposes.
I created this scheduler in the past, and it has been used for years in production. I implemented the cron algorithm in .Net, based in the open source algorithm that one developer (Artif Aziz) wrote. Check out my blog for more information on this:
CronTab schedule parser algorithm
If you think in a higher level (enterprise level), you could consider buying Control-M, one of the most powerful scheduler tools I have ever used, however it is quite expensive.
Cheers!
Roberto.