从Asp.Net MVC azure网站运行WebJob

时间:2015-12-13 21:35:08

标签: azure azure-webjobs

我想要做的是定期从我的Asp.Net MVC azure网站运行WebJob,而不必通过https://portal.azure.com/

我是否可以使用Azure资源浏览器为Azure Webjobs进行其余调用,以便我可以运行它?我看了,但我没有看到我创造的那个

3 个答案:

答案 0 :(得分:3)

资源浏览器目前没有显示此内容,但我可以在此处为您提供API。要调用触发的WebJob,请执行类似这样的POST(使用空请求正文):

POST /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{site}/triggeredwebjobs/{jobname}/run?api-version=2015-08-01

还有一种方法可以通过Kudu API而不是通过ARM来实现,并记录在案here

两者之间的区别在于您在第一种情况下使用ARM令牌进行身份验证,在第二种情况下使用基本身份验证发布凭据进行身份验证。但他们最终都做了同样的事情。

答案 1 :(得分:0)

  

为WebJobs部署配置控制台应用程序时,Visual Studio会安装Microsoft.Web.WebJobs.Publish NuGet程序包,并将计划信息存储在WebJobs项目的项目“属性”文件夹中的webjob-publish-settings.json文件中。以下是该文件的示例:

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "WebJob1",
  "startTime": "2014-06-23T00:00:00-08:00",
  "endTime": "2014-06-27T00:00:00-08:00",
  "jobRecurrenceFrequency": "Minute",
  "interval": 5,
  "runMode": "Scheduled"
}
  • 另一个选项TimerTriggerAttribute:使用最新的WebJobs SDK,它支持基于相同的CRON表达格式按计划触发作业功能。您可以使用它来安排工作:

    public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, TextWriter log)
    {
        log.WriteLine("Scheduled job fired!");
    }
    
  • 其他选项:使用Webjob API

    Invoke a triggered job**
    POST /api/triggeredwebjobs/{job name}/run
    
  • 上一个选项:使用Azure Management Libraries from Azure Web Jobs

答案 2 :(得分:0)

使用Kudu Api ......这是一个粗略的例子......

ASCIIEncoding encoder = new ASCIIEncoding();
byte[] data = encoder.GetBytes(serializedObjHere);

var url = "https://{site}.scm.azurewebsites.net/api/triggeredwebjobs/{jobname}/run";
var request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new System.Net.NetworkCredential("{username}", "{password}"); //you can get these in yoru publish profile
request.AllowWriteStreamBuffering = true;
request.Method = "POST";
request.Timeout = 60000; //60 seconds
request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
var response = (HttpWebResponse)request.GetResponse();
response.Close();
response.Dispose();