{"id":634,"date":"2014-03-27T12:07:00","date_gmt":"2014-03-27T12:07:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/webdev\/2014\/03\/27\/announcing-0-2-0-alpha2-preview-of-windows-azure-webjobs-sdk\/"},"modified":"2022-08-09T02:22:03","modified_gmt":"2022-08-09T09:22:03","slug":"announcing-0-2-0-alpha2-preview-of-windows-azure-webjobs-sdk","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-0-2-0-alpha2-preview-of-windows-azure-webjobs-sdk\/","title":{"rendered":"Announcing 0.2.0-alpha2 preview of Windows Azure WebJobs SDK"},"content":{"rendered":"<p><span style=\"font-size: small\">We are releasing an update to Windows Azure WebJobs SDK introduced by Scott Hanselman <\/span><a href=\"http:\/\/www.hanselman.com\/blog\/IntroducingWindowsAzureWebJobs.aspx\"><span style=\"font-size: small\">here<\/span><\/a><span style=\"font-size: small\">.<\/span><\/p>\n<h2><strong>Download this release<\/strong><\/h2>\n<p><span style=\"font-size: small\">You can download WebJobs SDK in a console application project from the NuGet gallery. You can install or update to these packages through NuGet gallery using the NuGet Package Manager Console, like this:<\/span><\/p>\n<ul>\n<ul>\n<ul>\n<li><span style=\"font-size: small\">Install-Package <\/span><a href=\"http:\/\/www.nuget.org\/packages\/Microsoft.WindowsAzure.Jobs\/0.2.0-alpha2\"><span style=\"font-size: small\">Microsoft.WindowsAzure.Jobs<\/span><\/a><span style=\"font-size: small\"> -Pre<\/span><\/li>\n<li><span style=\"font-size: small\">Install-Package <\/span><a href=\"http:\/\/www.nuget.org\/packages\/Microsoft.WindowsAzure.Jobs.Host\/0.2.0-alpha2\"><span style=\"font-size: small\">Microsoft.WindowsAzure.Jobs.Host<\/span><\/a><span style=\"font-size: small\"> -Pre<\/span><\/li>\n<\/ul>\n<\/ul>\n<\/ul>\n<h2><strong>What is WebJobs SDK?<\/strong><\/h2>\n<p><span style=\"font-size: small\">The <\/span><a href=\"http:\/\/www.windowsazure.com\/en-us\/documentation\/articles\/web-sites-create-web-jobs\/\"><span style=\"font-size: small\">WebJobs<\/span><\/a><span style=\"font-size: small\"> feature of Windows Azure Web Sites provides an easy way for you to run programs such as services or background tasks in a Web Site. You can upload and run an executable file such as an <em>.exe<\/em>, <em>.cmd<\/em>, or <em>.bat<\/em> file to your web site. You can run these as triggered or continuous WebJobs. Without WebJobs SDK, connecting and running background task requires a lot of complex programming. The SDK provides a framework that lets you write a minimum amount of code to get common tasks done. <\/span><\/p>\n<p><span style=\"font-size: small\">The WebJobs SDK has a binding and trigger system which works with Windows Azure Storage Blobs, Queues and Tables. The binding system makes it easy to write code that reads or writes Windows Azure Storage objects. The trigger system calls a function in your code whenever any new data is received in a queue or blob.<\/span><\/p>\n<p><span style=\"font-size: small\">The WebJobs SDK includes the following components:<\/span><\/p>\n<ul>\n<ul>\n<li><span style=\"font-size: small\">NuGet packages. The NuGet packages enable your code to use the WebJobs SDK binding and trigger system with Windows Azure Storage tables, blobs and queues. <\/span><\/li>\n<li><span style=\"font-size: small\">Dashboard. Part of the WebJobs SDK is already installed in Windows Azure Web Sites and provides rich monitoring and diagnostics for the programs that you write by using the NuGet packages. You don&#8217;t have to write code to use these monitoring and diagnostics features.<\/span><\/li>\n<\/ul>\n<\/ul>\n<h2><strong>Scenarios for WebJobs SDK<\/strong><\/h2>\n<p><span style=\"font-size: small\">Here are some typical scenarios you can handle more easily with the Windows Azure WebJobs SDK:<\/span><\/p>\n<ul>\n<ul>\n<li><span style=\"font-size: small\"><strong>Image processing<\/strong> or other CPU-intensive work. A common feature of web sites is the ability to upload images or videos. Often you want to manipulate the content after it&#8217;s uploaded<\/span><\/li>\n<li><span style=\"font-size: small\">Other <strong>long-running tasks<\/strong> that you want to run in a background thread, such as sending emails. Until now you couldn&#8217;t do this in ASP.NET because IIS would recycle your app if your app was idle for some time. Now with <\/span><a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2014\/01\/16\/windows-azure-staging-publishing-support-for-web-sites-monitoring-improvements-hyper-v-recovery-manager-ga-and-pci-compliance.aspx\"><span style=\"font-size: small\">AlwaysOn<\/span><\/a><span style=\"font-size: small\"> in Windows Azure Web Sites you can keep the web site from being recycled when the app is idle. <\/span><a href=\"http:\/\/weblogs.asp.net\/scottgu\/archive\/2014\/01\/16\/windows-azure-staging-publishing-support-for-web-sites-monitoring-improvements-hyper-v-recovery-manager-ga-and-pci-compliance.aspx\"><span style=\"font-size: small\">AlwaysOn<\/span><\/a><span style=\"font-size: small\"> ensures that the site does not go to sleep, which means you can run long-running tasks or services using WebJobs and the WebJobs SDK.<\/span><\/li>\n<li><span style=\"font-size: small\"><strong>Queue processing<\/strong>. A common way for a web frontend to communicate with a backend service is to use queues. When the web site needs to get work done, it pushes a message onto a queue. A backend service pulls messages from the queue and does the work. This is a common producer &ndash; consumer pattern.<\/span><\/li>\n<li><span style=\"font-size: small\"><strong>RSS aggregation<\/strong>. If you have a site that maintains a list of RSS feeds, you could pull in all of the articles from the feeds in a background process. <\/span><\/li>\n<li><span style=\"font-size: small\"><strong>File maintenance<\/strong>, such as aggregating or cleaning up log files.&nbsp; You might have log files being created by several sites and you want to do analysis on them. Or you might want to schedule a task to run weekly to clean up old log files<\/span>.<\/li>\n<\/ul>\n<\/ul>\n<h2><strong>Goals of the SDK<\/strong><\/h2>\n<ul>\n<ul>\n<li><span style=\"font-size: small\">Provide a way to make it easier to use Windows Azure Storage when doing any background processing work.<\/span>\n<ul>\n<li><span style=\"font-size: small\">The SDK makes it easier to consume Azure Storage within your application. You do not have to deal with writing code to read\/ write from storage.<\/span><\/li>\n<\/ul>\n<\/li>\n<li><span style=\"font-size: small\">Provider a rich diagnostics and monitoring experience without having the user write any diagnostics and logging code.<\/span><\/li>\n<\/ul>\n<\/ul>\n<h2><strong>Features of the SDK<\/strong><\/h2>\n<h2><strong>Azure Storage<\/strong><\/h2>\n<p><span style=\"font-size: small\">The SDK works with Azure Blobs, Queues and Tables.<\/span><\/p>\n<h2>Triggers<\/h2>\n<p><span style=\"font-size: small\">Functions get executed when a new input is detected on a Queue or a Blob. For example. In the following code ProcessQueue function will be triggered when a new message comes on a queue called &ldquo;longqueue&rdquo;. For more details on triggers please see this <\/span><a href=\"http:\/\/blogs.msdn.com\/b\/jmstall\/archive\/2014\/01\/28\/trigger-bindings-and-route-parameters-in-azurejobs.aspx\"><span style=\"font-size: small\">post<\/span><\/a><span style=\"font-size: small\">.<\/span><\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2737fffb-22ca-417f-bdb8-d87c10f656eb\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol style=\"background: #ffffff;margin: 0 0 0 2em;padding: 0 0 0 5px\" start=\"1\">\n<li><span style=\"background: #ffffff;color: #0000ff\">public<\/span><span style=\"background: #ffffff;color: #0000ff\">static<\/span><span style=\"background: #ffffff;color: #0000ff\">void<\/span><span style=\"background: #ffffff;color: #000000\"> ProcessQueue([<\/span><span style=\"background: #ffffff;color: #2b91af\">QueueInput<\/span><span style=\"background: #ffffff;color: #000000\">(<\/span><span style=\"background: #ffffff;color: #a31515\">&#8220;longqueue&#8221;<\/span><span style=\"background: #ffffff;color: #000000\">)] <\/span><span style=\"background: #ffffff;color: #0000ff\">string<\/span><span style=\"background: #ffffff;color: #000000\"> output)<\/span><\/li>\n<li style=\"background: #f3f3f3\"><span style=\"background: #ffffff;color: #000000\">{<\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"background: #ffffff;color: #2b91af\">Console<\/span><span style=\"background: #ffffff;color: #000000\">.WriteLine(output);<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;<\/li>\n<li><span style=\"background: #ffffff;color: #000000\">}<\/span><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h2>Bindings<\/h2>\n<p><span style=\"font-size: small\">The SDK supports binding to provides model binding between C# primitive types and Azure storage like Blobs, Tables, and Queues. This makes it easy for a developer to read\/ write from Blobs, Tables and Queues as they do not have to learn about the code around reading\/ writing from Azure Storage.<\/span><\/p>\n<ul>\n<li><span style=\"font-size: small\"><strong>Convenience<\/strong>. You can pick the type that&rsquo;s most useful for you to consume and the WebJobs SDK will take care of the glue code. If you&rsquo;re doing string operations on a blob, you can bind directly to TextReader\/TextWriter, rather than worry about how to convert to a TextWriter.<\/span><\/li>\n<li><span style=\"font-size: small\"><strong>Flushing and Closing<\/strong>: The WebJobs SDK will automatically flush and close outstanding outputs. <\/span><\/li>\n<li><span style=\"font-size: small\"><strong>Unit testability<\/strong>. The SDK makes it possible to unit test your code since you can mock primitive types like TextWriter rather than ICloudBlob. <\/span><\/li>\n<li><span style=\"font-size: small\"><strong>Diagnostics<\/strong>.&nbsp; Model binding works with the dashboard to give you real time diagnostics on your parameter usage. <\/span><\/li>\n<\/ul>\n<p><span style=\"font-size: small\">The following Bindings are currently supported: <strong>Stream, TextReader\/Writer, and String. <\/strong>You can add support for binding to your custom types and other types from the Storage SDK as well.<\/span><\/p>\n<p><span style=\"font-size: small\">For more details on how Bindings work against Azure Storage, please read <\/span><a href=\"http:\/\/blogs.msdn.com\/b\/jmstall\/archive\/2014\/02\/18\/azure-storage-bindings-part-1-blobs.aspx\"><span style=\"font-size: small\">Blobs<\/span><\/a><strong><span style=\"font-size: small\">, <\/span><\/strong><a href=\"http:\/\/blogs.msdn.com\/b\/jmstall\/archive\/2014\/02\/18\/azure-storage-bindings-part-2-queues.aspx\"><span style=\"font-size: small\">Queues<\/span><\/a><span style=\"font-size: small\"><strong> <\/strong>and <\/span><a href=\"http:\/\/blogs.msdn.com\/b\/jmstall\/archive\/2014\/03\/06\/azure-storage-bindings-part-3-tables.aspx\"><span style=\"font-size: small\">Tables<\/span><\/a><\/p>\n<h2>Hosting<\/h2>\n<p><span style=\"font-size: small\">A JobHost is an execution container which knows what all functions do you have in your program. A JobHost object (which lives in <\/span><a href=\"http:\/\/www.nuget.org\/packages\/Microsoft.WindowsAzure.Jobs.Host\"><span style=\"font-size: small\">Microsoft.WindowsAzure.Jobs.Host<\/span><\/a><span style=\"font-size: small\"> ) reads the bindings, listens on the triggers, and invokes the functions. In the following example, you create an instance of JobHost and call RunAndBlock(), which will cause the JobHost to listen for any triggers on any functions that you define in this Host.<\/span><\/p>\n<div id=\"scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f8404423-f939-4051-993f-eaeaf4353c14\" class=\"wlWriterEditableSmartContent\" style=\"margin: 0px;padding: 0px;float: none\">\n<div style=\"border: #000080 1px solid;color: #000;font-family: 'Courier New', Courier, Monospace;font-size: 10pt\">\n<div style=\"background: #000080;color: #fff;font-family: Verdana, Tahoma, Arial, sans-serif;font-weight: bold;padding: 2px 5px\">Code Snippet<\/div>\n<div style=\"background: #ddd;max-height: 300px;overflow: auto\">\n<ol style=\"background: #ffffff;margin: 0 0 0 2em;padding: 0 0 0 5px\" start=\"1\">\n<li><span style=\"background: #ffffff;color: #0000ff\">static<\/span><span style=\"background: #ffffff;color: #0000ff\">void<\/span><span style=\"background: #ffffff;color: #000000\"> Main(<\/span><span style=\"background: #ffffff;color: #0000ff\">string<\/span><span style=\"background: #ffffff;color: #000000\">[] args)<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"background: #ffffff;color: #000000\">{<\/span><\/li>\n<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"background: #ffffff;color: #2b91af\">JobHost<\/span><span style=\"background: #ffffff;color: #000000\"> host = <\/span><span style=\"background: #ffffff;color: #0000ff\">new<\/span><span style=\"background: #ffffff;color: #2b91af\">JobHost<\/span><span style=\"background: #ffffff;color: #000000\">();<\/span><\/li>\n<li style=\"background: #f3f3f3\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"background: #ffffff;color: #000000\">host.RunAndBlock();<\/span><\/li>\n<li>&nbsp;<\/li>\n<li style=\"background: #f3f3f3\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=\"background: #ffffff;color: #000000\">}<\/span><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<h2><strong>Dashboard for monitoring WebJobs.<\/strong><\/h2>\n<p><span style=\"font-size: small\">As WebJobs (<strong><em>written in any language and of any type<\/em><\/strong>) execute, you can monitor them in real time. You can see their state (Running, Stopped, Successfully completed), last run time and the logs of a particular execution. The following screenshot shows you a view of all WebJobs running in your Website.<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/5314.image_thumb_0779B828.png\"><img decoding=\"async\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/5314.image_thumb_0779B828.png\" alt=\"image\" width=\"743\" height=\"355\" border=\"0\" \/><\/a><\/p>\n<p><span style=\"font-size: small\">When you write a WebJob using the SDK, you get diagnostics and monitoring experience for the functions in your program. For example, let&rsquo;s say that you have an Image processing WebJob called &ldquo;ImageResizeAndWaterMark&rdquo; that has the following flow. <\/span><\/p>\n<p><span style=\"font-size: small\">When a user uploads an image to a Blob container called &ldquo;images1-input&rdquo;, the SDK will trigger WaterMark function. Watermark will process the image and write to &ldquo;images2-input&rdquo; container which will trigger the Resize function. Resize function will resize the image and write it to &ldquo;images2-output&rdquo; Blob container. The following <em>code shows the WebJob described above<\/em>. For a full working sample, please see the sample <\/span><a href=\"https:\/\/aspnet.codeplex.com\/SourceControl\/latest#Samples\/AzureWebJobs\/ReadMe.txt\"><span style=\"font-size: small\">here<\/span><\/a>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/5228.image_thumb_178886DF.png\"><img decoding=\"async\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/5228.image_thumb_178886DF.png\" alt=\"image\" width=\"493\" height=\"424\" border=\"0\" \/><\/a><\/p>\n<p><span style=\"font-size: small\">When you run the WebJob in Azure, you can view the WebJobs Dashboard by clicking the logs link of the &ldquo;ImageResizeAndWaterMark&rdquo; in the WEBJOBS tab of Windows Azure Websites portal.<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/7317.image_thumb_4260EAF1.png\"><img decoding=\"async\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/7317.image_thumb_4260EAF1.png\" alt=\"image\" width=\"691\" height=\"170\" border=\"0\" \/><\/a><\/p>\n<p><span style=\"font-size: small\">Since the Dashboard is a SiteExtension you can access it by going to the url:&nbsp; <\/span><a href=\"https:\/\/mysite.scm.azurewebsites.net\/azurejobs\"><span style=\"font-size: small\">https:\/\/mysite.<strong>scm<\/strong>.azurewebsites.net\/<strong>azurejobs<\/strong><\/span><\/a><a href=\"https:\/\/mysite.scm.azurewebsites.net\/azurejobs\"><span style=\"font-size: small\">.<\/span><\/a><span style=\"font-size: small\">&nbsp; You will need your deployment credentials to access the SiteExtension. For more information on accessing Site Extension, see the documentation on the Kudu project <\/span><a href=\"https:\/\/github.com\/projectkudu\/kudu\/wiki\/Accessing-the-kudu-service\"><span style=\"font-size: small\">https:\/\/github.com\/projectkudu\/kudu\/wiki\/Accessing-the-kudu-service<\/span><\/a><strong><\/strong><\/p>\n<h3>Function execution details<\/h3>\n<p><span style=\"font-size: small\">When you are monitoring a particular execution of this &ldquo;ImageResizeAndWaterMark&rdquo; WebJob, you can view invocation details about the functions in the program such as:<\/span><\/p>\n<ul>\n<ul>\n<li><span style=\"font-size: small\">What are the parameters of this function?<\/span><\/li>\n<li><span style=\"font-size: small\">How much time did it take for the function to execute.<\/span><\/li>\n<li><span style=\"font-size: small\">How much time did it take to read from Blob and how many bytes were read\/ written.<\/span><\/li>\n<\/ul>\n<\/ul>\n<h3><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/4760.image_thumb_3018242F.png\"><img decoding=\"async\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/4760.image_thumb_3018242F.png\" alt=\"image\" width=\"721\" height=\"640\" border=\"0\" \/><\/a><\/h3>\n<h3><strong>Invoke &amp; Replay<\/strong><\/h3>\n<p><span style=\"font-size: small\">In the above example if the WaterMark function fails for some reason, you can upload a new image and Replay WaterMark function, which will trigger the execution chain and call Resize function as well. This is useful to diagnose and debug an issue when you have a complicated graph for chaining functions together. You can also Invoke a function from the dashboard.<\/span><\/p>\n<h3><strong>Causality of functions<\/strong><\/h3>\n<p><span style=\"font-size: small\">In the above example, we know that when the WaterMark function writes to a Blob, it will trigger the Resize function. The dashboard will show this causality between functions. If you have chained lots of functions which will get triggered as new inputs are detected then it can be useful to see this causality graph.<\/span><\/p>\n<h3><strong>Search Blobs<\/strong><\/h3>\n<p><span style=\"font-size: small\">You can click on Search for a Blob and get information on what happened to that Blob. For example, in the case of the ImageResizeAndWaterMark, the Blob was written because the WaterMark function got executed. For more details on Search Blobs see this <\/span><a href=\"http:\/\/blogs.msdn.com\/b\/jmstall\/archive\/2014\/02\/19\/who-wrote-that-blob.aspx\"><span style=\"font-size: small\">post<\/span><\/a><span style=\"font-size: small\">.<\/span><\/p>\n<h2>Samples<\/h2>\n<p><span style=\"font-size: small\">Samples for WebJobs SDK can be found at <\/span><a href=\"https:\/\/aspnet.codeplex.com\/SourceControl\/latest#Samples\/AzureWebJobs\/ReadMe.txt\"><span style=\"font-size: small\">https:\/\/aspnet.codeplex.com\/SourceControl\/latest#Samples\/AzureWebJobs\/ReadMe.txt<\/span><\/a><\/p>\n<ul>\n<ul>\n<li><span style=\"font-size: small\">You can find samples on how to use triggers and bindings for Blobs, Tables and Queues.<\/span><\/li>\n<li><span style=\"font-size: small\">There is a sample called PhluffySuffy which is an Image processing Website where a customer can upload pictures which will trigger a function to process those pictures from Blob storage.<\/span><\/li>\n<\/ul>\n<\/ul>\n<h2>Documentation<\/h2>\n<ul>\n<ul>\n<li><a href=\"http:\/\/www.asp.net\/aspnet\/overview\/developing-apps-with-windows-azure\/getting-started-with-windows-azure-webjobs\"><span style=\"font-size: small\">Tutorial: Getting Started with the Windows Azure WebJobs SDK<\/span><\/a><\/li>\n<li><a href=\"https:\/\/channel9.msdn.com\/Shows\/Web+Camps+TV\/Making-Your-Jobs-Easier-With-Windows-Azure-WebJobs-SDK\"><span style=\"font-size: small\">Channel 9 video on Making Your Jobs Easier With Windows Azure WebJobs SDK<\/span><\/a><\/li>\n<li><span style=\"font-size: small\"><a href=\"http:\/\/www.hanselman.com\/blog\/IntroducingWindowsAzureWebJobs.aspx\">Introduction to WebJobs and SDK by Scott Hanselman<\/a><\/span><\/li>\n<li><span style=\"font-size: small\"><a title=\"A web site monitor built using WebJobs SDK and ASP.NET\" href=\"http:\/\/www.bradygaster.com\/post\/rebuilding-the-sitemonitr-using-windows-azure-webjobs\">A web site monitor built using WebJobs and ASP.NET<\/a>&nbsp;by <a title=\"Brady Gaster\" href=\"https:\/\/twitter.com\/bradygaster\">Brady Gaster<\/a><\/span><\/li>\n<li><a href=\"http:\/\/www.bradygaster.com\/post\/rebuilding-the-sitemonitr-using-windows-azure-webjobs\"><span style=\"font-size: small\">http:\/\/www.bradygaster.com\/post\/rebuilding-the-sitemonitr-using-windows-azure-webjobs<\/span><\/a><\/li>\n<li><a href=\"http:\/\/curah.microsoft.com\/52143\/using-the-webjobs-feature-of-windows-azure-web-sites\"><span style=\"font-size: small\">List of articles on WebJobs and WebJobs SDK<\/span><\/a><\/li>\n<\/ul>\n<\/ul>\n<h2><strong>Deploying WebJobs with SDK<\/strong><\/h2>\n<p><span style=\"font-size: small\">If you don&#8217;t want to use the WebJobs portal page to upload your scripts, you can use FTP, git, or Web Deploy. For more information, see <\/span><a href=\"http:\/\/blog.amitapple.com\/post\/74215124623\/deploy-azure-webjobs\"><span style=\"font-size: small\">How to deploy Windows Azure WebJobs<\/span><\/a><span style=\"font-size: small\"> and <\/span><a href=\"http:\/\/blog.amitapple.com\/post\/73574681678\/git-deploy-console-app\"><span style=\"font-size: small\">Git deploying a .NET console app to Azure using WebJobs<\/span><\/a><\/p>\n<p><span style=\"font-size: small\">If you want to deploy your WebJobs along with your Websites, check out the following Visual Studio&nbsp;<\/span><a href=\"http:\/\/visualstudiogallery.msdn.microsoft.com\/f4824551-2660-4afa-aba1-1fcc1673c3d0\"><span style=\"font-size: small\">extension<\/span><\/a><span style=\"font-size: small\">.<\/span><\/p>\n<h2><strong>Known Issues from 0.1.0-alpha1 to 0.2.0-alpha2<\/strong><\/h2>\n<h2><strong>Dashboard will only work for WebJobs deployed with 0.2.0-alpha2<\/strong><\/h2>\n<p><span style=\"font-size: small\">If you had a WebJob deployed with 0.1.0-alpha1 of SDK and, if you access the dashboard to see the logs for the WebJob, then you will see a warning about &ldquo;Host not running&rdquo;. This happens because as part of this release a newer version of the dashboard gets deployed to all Azure Websites. The new dashboard has some protocol changes which are not compatible with 0.1.0-alpha1. To work around this error, please update your WebJob to use 0.2.0-alpha2 NuGet package and redeploy your WebJob.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/0871.image_thumb_005D0C61.png\"><img decoding=\"async\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/aspnet\/wp-content\/uploads\/sites\/16\/2014\/03\/0871.image_thumb_005D0C61.png\" alt=\"image\" width=\"699\" height=\"427\" border=\"0\" \/><\/a><\/p>\n<h2><strong>Give feedback and get help<\/strong><\/h2>\n<p><span style=\"font-size: small\">The <\/span><a href=\"http:\/\/www.windowsazure.com\/en-us\/documentation\/articles\/web-sites-create-web-jobs\/\"><span style=\"font-size: small\">WebJobs<\/span><\/a><span style=\"font-size: small\"> feature of Windows Azure Web Sites and the Windows Azure WebJobs SDK are in preview and not formally supported. Feedback will be considered in changes we make to future versions.<\/span><\/p>\n<p><span style=\"font-size: small\">If you have questions that are not directly related to the tutorial, you can post them to the <\/span><a href=\"http:\/\/www.windowsazure.com\/en-us\/support\/forums\/\"><span style=\"font-size: small\">Windows Azure forum<\/span><\/a><span style=\"font-size: small\">, the <\/span><a href=\"http:\/\/forums.asp.net\/1247.aspx\"><span style=\"font-size: small\">ASP.NET forum<\/span><\/a><span style=\"font-size: small\">, or <\/span><a href=\"http:\/\/stackoverflow.com\/\"><span style=\"font-size: small\">StackOverflow.com<\/span><\/a><span style=\"font-size: small\">. Use <\/span><a href=\"https:\/\/twitter.com\/search?q=AzureWebJobs\"><span style=\"font-size: small\">#AzureWebJobs<\/span><\/a><span style=\"font-size: small\"> for Twitter and the tag Azure-WebJobsSDK for StackOverflow.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are releasing an update to Windows Azure WebJobs SDK introduced by Scott Hanselman here. Download this release You can download WebJobs SDK in a console application project from the NuGet gallery. You can install or update to these packages through NuGet gallery using the NuGet Package Manager Console, like this: Install-Package Microsoft.WindowsAzure.Jobs -Pre Install-Package [&hellip;]<\/p>\n","protected":false},"author":408,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[],"class_list":["post-634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aspnet"],"acf":[],"blog_post_summary":"<p>We are releasing an update to Windows Azure WebJobs SDK introduced by Scott Hanselman here. Download this release You can download WebJobs SDK in a console application project from the NuGet gallery. You can install or update to these packages through NuGet gallery using the NuGet Package Manager Console, like this: Install-Package Microsoft.WindowsAzure.Jobs -Pre Install-Package [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/408"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=634"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}