我可以从Azure网站调用Azure webjob并传递参数吗?

时间:2014-03-08 05:34:56

标签: azure azure-web-sites azure-webjobs

我想要从Azure网站调用Azure webjob。我想将字符串参数从网站传递到webjob。

我知道我可以将webjob作为REST API(https://github.com/projectkudu/kudu/wiki/Web-jobs)调用。
所以我可以在没有任何参数的情况下调用webjob:POST jobs / triggered / myjobname / run

但最后添加参数似乎不起作用,即jobs / triggered / myjobname / run?myparam1 = value1

我在使用Microsoft.WindowsAzure.Jobs中的属性进行绑定时看到的信息没有提到我的情况,只是绑定到Azure存储项(http://blogs.msdn.com/b/jmstall/archive/2014/01/28/trigger-bindings-and-route-parameters-in-azurejobs.aspx)。

我想做的是可行的吗?我是否需要执行诸如在Azure存储队列中创建新项目以触发我的webjob之类的操作?

感谢。

4 个答案:

答案 0 :(得分:10)

您可以使用以下地址调用带有参数的azure webjob: " https://mywebsite.scm.azurewebsites.net/api/triggeredwebjobs/mywebjob/run?arguments=myparameter"

class Program
{
    static void Main(string[] args)
    { 
        if (args[0]=="myparameter")
        ... 
    }
}

以下内容中的一些信息:https://github.com/projectkudu/kudu/pull/1183

答案 1 :(得分:8)

如果您想从您的网站调用WebJob,您可以做的最好的事情就是在您的网站内部使用WebJob代码并简单地调用该代码,您仍然可以轻松地从您的网站内部使用WebJob SDK。 (用于调用WebJobs SDK方法示例:http://thenextdoorgeek.com/post/WAWS-WebJob-to-upload-FREB-files-to-Azure-Storage-using-the-WebJobs-SDK)。

您不希望从您的网站调用WebJob的原因是该调用包含您不会存储在您的网站上的秘密(部署凭据)。

如果您更喜欢将WebJob和网站代码分开,最好的办法是使用队列进行通信,WebJob会侦听队列,并且网站会将请求推送到队列。

关于原始问题,目前无法将参数传递给WebJob调用调用。

答案 2 :(得分:4)

我花了一些时间来弄清楚如何使用Azure门户UI(而不是Post Api / Kudu)使用参数设置作业,所以这里是以下步骤:

  1. 在WebApp上创建Webjob

  2. 在“计划程序作业集合”,“计划程序作业”列表中的某个区域集合中找到Web作业

  3. 更改作业“操作设置”中的网址,并将?arguments=<myArgument>附加到该网址,使其最终显示为:

    ...scm.azurewebsites.net/api/triggeredwebjobs/<my-job-name>/run?arguments=<myArgument>

答案 3 :(得分:2)

记录的方法是将一个或多个Azure队列消息放入队列。每条消息都应包含足够的参数信息,以使您的webjob能够做到这一点。

在您的WebJob中,使用QueueTriggerAttribute允许Azure在收到相应的队列消息时自动启动WebJob。

详情

http://azure.microsoft.com/en-gb/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/