将webjobs功能公开到仪表板,无需天蓝色存储

时间:2014-09-15 00:36:32

标签: azure azure-webjobs

this question中有一个关于如何使用webjob的示例,该webjob可以在不与azure表存储交互的情况下执行某些后台操作。

我试图在答案中复制代码,但它引发了以下错误:

' ' Void ScheduleNotifications()'无法从Azure WebJobs SDK调用。是否缺少Azure WebJobs SDK属性? '

this link中,他们有类似的错误,在其中一个答案中,它说这是在0.4.1-beta版本中修复的。我正在运行0.5.0-beta版本,但我遇到了错误。

这是我的代码的副本:

class Program
{
    static void Main()
    {
        var config = new JobHostConfiguration(AzureStorageAccount.ConnectionString);
        var host = new JobHost(config);

        host.Call(typeof(Program).GetMethod("ScheduleNotifications"));

        host.RunAndBlock();
    }

    [NoAutomaticTrigger]
    public static void ScheduleNotifications()
    {
        //Do work
    }
}

我想知道我是否遗漏了某些内容,或者这仍然是Webjobs SDK中的错误。

更新:根据维克多的回答,计划课必须公开。

工作代码:

public class Program
{
    static void Main()
    {
        var config = new JobHostConfiguration(AzureStorageAccount.ConnectionString);
        var host = new JobHost(config);

        host.Call(typeof(Program).GetMethod("ScheduleNotifications"));

        host.RunAndBlock();
    }

    [NoAutomaticTrigger]
    public static void ScheduleNotifications()
    {
        //Do work
    }
}

2 个答案:

答案 0 :(得分:18)

除非您使用自定义类型定位器,否则函数必须满足以下所有条件:

  • 必须公开
  • 必须是静态的
  • 它必须是非抽象的
  • 它必须属于非抽象类
  • 必须是公共课

您的功能不符合最后一个条件。如果你公开上课,那就可以了。

另外,如果您使用webjobs sdk 0.5.0-beta并运行仅包含示例代码的程序,您将看到一条消息,指出未找到任何功能。

答案 1 :(得分:0)

在这里寻找答案,但在上面的答案中并没有找到答案,尽管他说的一切都是真的。我的问题是我不小心改变了Azure Web作业的入站属性名称,因此它们与该函数应该捕获的对象的属性不匹配。杜!

具体例子:

我的网络工作正在侦听基于此类的队列消息:

public class ProcessFileArgs
{
    public ProcessFileArgs();

    public string DealId { get; set; }
    public ProcessFileType DmsFileType { get; set; }
    public string Email { get; set; }
    public string Filename { get; set; }
}

但是在functions.cs文件中我的公共静态异步类包含它作为函数定义,其中声明的参数与它正在等待的队列消息类中的名称不匹配:

    public static async Task LogAndLoadFile(
        [QueueTrigger(Queues.SomeQueueName)] ProcessFileArgs processFileArgs,
        string dealid,
        string emailaddress,
        string file,            
        [Blob("{fileFolder}/{Filename}", FileAccess.Read)] Stream input,
        TextWriter log,
        CancellationToken cancellationToke)
    {

因此,如果您遇到此问题,请检查以确保参数和属性名称匹配。