【问题标题】:Expose webjobs functions to dashboard without azure storage在没有 Azure 存储的情况下向仪表板公开 webjobs 功能
【发布时间】:2014-09-15 00:36:31
【问题描述】:

this question 中有一个示例,说明如何使用可以执行一些后台操作而不与 azure 表存储交互的 webjob。

我试图复制答案中的代码,但它抛出了以下错误:

' '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 中的错误。

更新:根据 Victor 的回答,Program 类必须是公开的。

工作代码:

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
    }
}

【问题讨论】:

    标签: azure azure-webjobs


    【解决方案1】:

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

    • 必须公开
    • 它必须是静态的
    • 它必须是非抽象的
    • 它必须在一个非抽象类中
    • 它必须在公共类中

    您的函数不满足最后一个条件。如果您将课程公开,它将起作用。

    此外,如果您使用 webjobs sdk 0.5.0-beta 并且仅使用示例中的代码运行程序,您将看到一条消息,指出未找到任何函数。

    【讨论】:

    • 感谢您的信息。我将进行适当的更改并重新部署。我会告诉你进展如何。
    • 感谢维克多的帮助。这解决了问题。我也更新到 0.6.0 beta 并且得到了你提到的错误。
    【解决方案2】:

    来这里寻找答案,但在上面的答案中没有找到答案,尽管他所说的一切都是真的。我的问题是我不小心更改了 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)
        {
    

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

    【讨论】:

    • 只是出于好奇,你为什么在类中有参数并且还单独声明?
    • 他们在不同的项目中。 ProcessFileArgs 类是众多类之一,它在一个常规 dll 项目中声明,该项目由 Web 作业引用,这样多个 Web 作业可以相互发送队列消息。通常的 - 抽象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2014-10-31
    相关资源
    最近更新 更多