Windows Azure - background/scheduled tasks? - c#

Previously, there was worker role in Azure, now I can't see one - so what to use for background/scheduled tasks, like maintainance, email sending, etc, should I create virtual machine and create windows services there or is there easier way?

The definitive (current) guide to this FAQ is Guarav's Building a Simple Task Scheduler in Windows Azure — which, as it turns out, is not that simple, and it is not really suited to Azure websites (but rather roles).
The simplest solution is to create RESTful (ish) routes (controllers, etc) using something like the MVC Web API and get a cron job scheduler to kick them off. Recently I have been using the Aditi cloud scheduler which kicks of those jobs for you, and is free (5000 calls per month) in the marketplace.

There is this new scheduler http://www.windowsazure.com/en-us/services/scheduler/
Windows Azure Scheduler allows you to invoke actions—such as calling HTTP/S endpoints or posting a message to a storage queue—on any schedule. With Scheduler, you create jobs in the cloud that reliably call services both inside and outside of Windows Azure and run those jobs on demand, on a regularly recurring schedule, or designate them for a future date. This service is currently available as a standalone API.

If you are using Azure Web Sites (and they are very good) then there is the new WebJobs feature that lets you poke a http(s) endpoint or run scripts on a schedule.

Web and Worker Roles are part of the Cloud Service model, and both exist and haven't gone anywhere.
As stated in the comments to your question, the portal does not facilitate construction of these roles; this is something you'd create, either through Visual Studio, Eclipse (worker role), or PowerShell.
And you don't need a worker role for background tasks. As mentioned in dozens of other answers, worker and web roles are templates for Windows Server virtual machines. Since the VMs are stateless and restart each time from the same baseline, the template shapes what gets installed at startup.
You can run background tasks as a thread in either a web role or worker role. So if you wanted to, you could run all your background tasks within the same web role instances as your web site.
I recommend working through some of the basic examples in the Azure Training Kit, which walk through creating different roles from Visual Studio.

Related

How to put my console application dll in logic apps scheduler instead of Web jobs?

Previously we create app serivce and in that by selecting web jobs we created schedulers by uploading dll zip.Now azure is retiring schedule web jobs.It is replaced now by logic apps.How to schedule my app now?
i.e.,how to put my dll in logic apps
First thing Azure web jobs and Azure Scheduler are different. As correctly said by Kamran, your system will not be impacted as you are using Azure web jobs.
Also Azure Scheduler already retire on 30th September 2019.
https://azure.microsoft.com/en-in/updates/azure-scheduler-will-retire-on-september-30-2019/
Firstly you have to know logic app is a cloud service that helps you schedule, automate, and orchestrate tasks, business processes, and workflows when you need to integrate apps, data, systems, and services across enterprises or organizations. It doesn't run dll file, you could use it to connect other service without code. About how to migrate scheduler to logic app you could refer to this doc: Migrate Azure Scheduler jobs.
Then if you want to run dll file on azure, the scheduler is totally retired, you could choose to use azure webjob or azure function. They both support cron expression to do a schedule job.
About how to develop webjob you could refer to this doc:Develop and deploy WebJobs and here is the doc about how to develop azure function:Develop Azure Functions

How to fire Quartz.net job running in windows service from web application?

Quartz.net has changed and I am unable to find examples or documentation to develop a solution with Jobs scheduled in a windows service with Spring.net configuration i.e. not adding the trigger and schedule programmatically. Also want to trigger a job from a web application on demand.
Please could you provide example or documentation as to how the following can be done,
1) Creating jobs with spring.net configuration(appContext.xml)
2) Trigger on demand job(scheduled in windows service) from web application
To perform that you need to interact with quartz job manager. You need to exchange data between Web app and Windows Services, exist many ways to do that (WCF, Web API, NancyFX apis...)
Now you can make calls to job scheduler. Basically, look spring. Net documentation to see how to interact with quartz. Make that on your api (hosted on your Windows. services).
Does not forget about security.

creating azure worker rules from a vm

is it possible to start Worker Role Instances dynamically from a c# application running on azure windows vm?
in azure i have a Medium virtual machine, on it there is a c# console application that runs automatically on 11:00PM daily and it keeps processing data until about 7:00AM, my data is getting bigger and thus needs more time to be processed and i need to finish processing all data before 5:00AM.
is it possible to use Worker rule to run an instance of the application an pass it a part of the data to process?
note that my process makes http requests to external websites and the processed data gets written to a mongodb.
i am not sure where to start, and i am not sure if using worker rules is better than creating couple vms.
in general how would you solve this problem with the tools available on azure?
Is it possible to start Worker Role Instances dynamically from a c#
application running on azure windows vm?
Absolutely Yes. In order to do so, you would need to consume Service Management API. You could either write code yourself to consume this API or there's a Windows Azure Management Library available to do so which you can install from Nuget. To learn more about this API, you may find this blog post useful: http://www.bradygaster.com/post/getting-started-with-the-windows-azure-management-libraries.
Generally speaking Worker Roles are equivalent to Windows Services in the sense that both are used to perform background tasks. Since you're performing background tasks through your VM, I can't see any reason why you can't do the same though a Worker Role instance. My recommendation would be to go through tutorials available online or Windows Azure Platform Training Kit to become familiar with Worker Role concepts and how you could make use of them in your project.
For your specific scenario you may want to look at the auto scale rules that are now available; In the configuration for the worker role, in the Azure Management Console, you can specify, for example, that you want at least two workers running between certain times each day.
The Service Management API gives you a lot more control, but the auto scale is quick and easy to start with.
Incidentally, if the work your worker has to do can be divided into atomic chunks, then you may want to use a storage queue to write all the tasks to and then have the worker role pull tasks off that queue. You can then configure the autoscale to monitor the length of the queue and start and stop workers as required.

Best practices for cron job style tasks on the ASP.NET MVC / Azure platform?

Every day, I want to email all my users who have signed up, but not completed a specific task.
What is the best framework for approaching this problem on the .NET MVC / Windows Azure platform?
Coming from OS/Linux world I would write a program and schedule it to run daily via crontab.
At least for the scheduling part, you could look into Windows Azure Scheduler Service announced not too long ago. Using this service, you would be able to invoke a HTTP/HTTPS web endpoint of write a message to a queue on a scheduled interval.
For sending emails, you would still need to write a program. You could host this program as a cloud service running as a worker role or you could write that logic in a web application and host it as a Windows Azure Website.
Azure just added the ability to schedule jobs. Currently in "Preview"
You can find more information about the scheduler jobs in here.
http://gauravmantri.com/2013/11/10/windows-azure-scheduler-service-part-i-introduction/
http://gauravmantri.com/2013/11/10/windows-azure-scheduler-service-part-ii-managing-cloud-services/
You could leverage the scheduled task component of Azure Mobile Services to achieve this outcome and write the code to achieve it using node.js (see: http://www.windowsazure.com/en-us/develop/mobile/tutorials/schedule-backend-tasks/) It's possible to add other npm packages so you are limited to what's already deployed to Azure so you could hopefully find a library to do the mail sending for you. The only thing you'd need to think about is reliable mail delivery which on Azure typically means using SendGrid to avoid spam blackists.

Spawning and executing a Worker process in Azure

The google has really failed me on this one. I am new to Azure and am only intermediate at .NET
I have an Azure solution going and I've written some code in a Web Role which runs great. What I would like to do now is move some of this code into an Azure Worker, which will be initialized by a controller function in the Web Role
What on earth do I need to do to get this going locally? I have created the Worker project within the SLN. I just need to know how to fire it up and run it.
I think part of my problem is I am assuming these workers behave like Heroku workers... is this the case? Because what I need is something like a queue system (a bunch of "worker tasks" in one big queue).
A lot of the links I've found for tutorials seem to tap dance around how to actually initialize the process from a Web Role.
Workers in Windows Azure are not tasks; they're entire VMs. To make your life easier, memorize this little detail: Web Role instances are Windows Server 2008 with IIS running, and Worker Roles are the same thing but with IIS disabled.
When you added that worker role to your project, you actually now have a new set of virtual machines running (at least one, depending on the instance count you set). These VMs have their own OnStart() and Run() methods you can put code into, for bootstrapping purposes.
If you grab the Windows Azure training kit, you'll see a few labs that show how to communicate between your various role instances (a common pattern being the use of Windows Azure queues). There's a good example of background processes with the Guestbook hands-on lab (the very first lab).
More info on this, as I've gotten it going now..
If you're coming from a Heroku background, then an Azure Worker is more or less the function in Rails that you'd actually execute with the queue. Unlike Heroku queued operations, an Azure Worker just runs endlessly and keeps polling for new stuff to do... hence the templated sleep(10000) in the Run() function.
The most conventional way I've found to make a Web and Worker talk to each other is by queue messages via Azure ServiceBus which is currently NOT emulated, meaning you need a functioning Azure account to make this work, and it will work even if you are running locally. You just need internet access.
A ServiceBus message can pass an entire object over to the Worker (so long as the Worker proj has the right dependencies in it), so that's kind of nice.
I think you're just having trouble starting the azure emulator along with your worker/web roles? Just set the azure configuration project as the start up project and run that. It'll boot up the emulator along with all your roles.

Categories