This site uses cookies and by using the site you are consenting to this. We utilize cookies to optimize our brand’s web presence and website experience. To learn more about cookies, click here to read our privacy statement.

How to Create a Scheduled Background WebJob in Azure

In the past you might have created a scheduled WebJob using a CORN expression. While that is still possible for non-.NET environments, if you want to run a .NET based WebJob you would need to use an Azure Scheduler.

If you have an existing WebJob with a CORN expression and a publish settings file with “runMode” set to “Scheduled”, you might get the following error while deploying it:

Error : An error occurred while creating the WebJob schedule: Response status code does not indicate success: 409 (Conflict).

The solution to this would be to create a triggered WebJob and trigger it using a scheduler. Let’s walk through this process:

Create a triggered WebJob

The default project template is to build process queue messages (refer to Function.cs). To change this to execute by a manual trigger, remove the “ProcessQueueMessage” method and add your own trigger handler.

A screen shot of an adobe code editor featuring Scheduled WebJobs.
Add the code to implement the functionality you wish your WebJob to do (Line # 14 thru 16). Now, modify the Program.cs to call the trigger handler (Line # 20).

A screen shot of the code editor in adobe c# with Scheduled WebJobs.
Be sure to set the connection strings for AzureWebJobsDashboard and AzureWebJobsStorage. Those are required by the Azure WebJob infrastructure to store log and data.

When you try to publish the WebJob, you will see a dialog box to configure the WebJob. Provide a meaningful name and set the run mode to “Run on Demand”.

Add scheduled Microsoft Azure WebJobs to your project.

This configuration is saved in a file – webjob-publish-settings.json and added to the project under properties.

A screen shot of the code editor in Adobe, showcasing Scheduled WebJobs.
Assuming you have an App Service Plan and a Web App, go ahead and deploy your WebJob.

Once you have deployed, your WebJob is ready to run. What you need to is the scheduler to trigger it on a scheduled basis.

Create a Scheduler for the WebJob. Go to the Azure portal find your WebJob and click on properties to view the web hook and credentials that will be used to trigger the WebJob.

A screenshot of the azure management portal showcasing Scheduled WebJobs.

This information will be needed by the scheduler.

Creating a scheduler

Create a scheduler for the WebJob in the Azure portal:

A screen shot of the azure portal displaying Scheduled WebJobs.
The Scheduler needs a Scheduler Job collection. You can select an existing one or create new with the pricing tier that fits your requirements.

A screenshot of the azure management console showcasing Scheduled WebJobs.
The free tier allows you to run up to 5 jobs with “every hour” as the max frequency. However it does not allow you to schedule jobs with authentication. For this example, at least a standard tier is required.

Next, select the action that the scheduler needs to take. In our case, it needs to trigger the WebJob via the web hook and credentials we saw in the properties of the WebJob. The web hook can only be called via the Post method. Using the retry policy, you could set how often the scheduler should retry if the scheduled request fails.

Finally set the schedule – once or reoccurring (with re-occurrence details).

Testing / verifying your setup

At this point you can go to the Job collection, and select the scheduler and look at the history of the job with details, in case of an error calling the end point. You can also make a one off call out of your schedule from the Scheduler by clicking the “Run now” button.

A screenshot of the Azure dashboard displaying Scheduled WebJobs.
You can also verify the logs of each run in the KUDU console by clicking on Logs after selecting the WebJob from the WebJobs list.

A screenshot of the azure web portal displaying Scheduled WebJobs.
A screenshot of a page displaying a list of items, including Scheduled WebJobs.