在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
}
}
答案 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)
{
因此,如果您遇到此问题,请检查以确保参数和属性名称匹配。