Azure Webjobs - 使用参数调用方法并调用绑定

时间:2014-07-04 22:05:22

标签: azure azure-webjobs

我正在使用Web Jobs sdk进行更多操作,我只需要通过调度程序调用一个方法,它应该将1-n文件写入存储。 WebJobs SDK的优点在于我不需要包含Azure Storage SDK,所有内容都是“绑定”的。它在我指定文件名时有效,但我的“WriteCustomFile”方法只写了一个名为“{name}”的文件

代码:

class Program
{
    static void Main(string[] args)
    {
        JobHost host = new JobHost();
        host.Call(typeof(Program).GetMethod("WriteFile"));
        host.Call(typeof(Program).GetMethod("WriteCustomFile"), new { name = "Helloworld1.txt" });
        host.Call(typeof(Program).GetMethod("WriteCustomFile"), new { name = "Helloworld2.txt" });
        host.Call(typeof(Program).GetMethod("WriteCustomFile"), new { name = "Helloworld3.txt" });
        //host.RunAndBlock();
    }

    [NoAutomaticTrigger]
    public static void WriteFile([Blob("container/foobar.txt")]TextWriter writer)
    {
        writer.WriteLine("Hello World..." + DateTime.UtcNow.ToShortDateString() + " - " + DateTime.UtcNow.ToShortTimeString());
    }

    [NoAutomaticTrigger]
    public static void WriteCustomFile(string name, [Blob("container/{name}")] TextWriter writer)
    {
        writer.WriteLine("Hello World New ..." + name + ":" + DateTime.UtcNow.ToShortDateString() + " - " + DateTime.UtcNow.ToShortTimeString());
    }
}

我想要实现的只是用给定的文件名调用“WriteCustomFile”。我发现的所有样本都在考虑“Blob输入/输出”的想法。我找到了这个样本,但它似乎更像是一个黑客;) http://thenextdoorgeek.com/post/WAWS-WebJob-to-upload-FREB-files-to-Azure-Storage-using-the-WebJobs-SDK

目前有办法做到这一点吗?

1 个答案:

答案 0 :(得分:7)

WebJobs SDK 3.0.1不支持Host.Call的“花式”参数绑定(以及从仪表板调用) - 我们将在未来的版本中添加它。

目前,解决方法是明确指定blob的路径:

static void Main(string[] args)
{
    JobHost host = new JobHost();
    host.Call(
        typeof(Program).GetMethod("WriteCustomFile"), 
        new { 
            name = "Helloworld1.txt", 
            writer = "container/Helloworld1.txt" });
}

[NoAutomaticTrigger]
public static void WriteCustomFile(string name, [Blob("container/{name}")] TextWriter writer)
{
    writer.WriteLine("Hello World New ..." + name + ":" + DateTime.UtcNow.ToShortDateString() + " - " + DateTime.UtcNow.ToShortTimeString());
}