【问题标题】:Why Azure WebJob JobHost.CallAsync returns error为什么 Azure WebJob JobHost.CallAsync 返回错误
【发布时间】:2019-04-17 00:18:51
【问题描述】:

这是我的代码:

JobHost host = new JobHost(config);
host.CallAsync(typeof(Program).GetMethod("Auth")).GetAwaiter().GetResult();

在 WebJob Run Details 中,我看到了以下信息:

[04/16/2019 23:21:16 > 6b9633: ERR ] 
[04/16/2019 23:21:16 > 6b9633: ERR ] Unhandled Exception: System.ArgumentNullException: Value cannot be null.
[04/16/2019 23:21:16 > 6b9633: ERR ] Parameter name: method
[04/16/2019 23:21:16 > 6b9633: ERR ]    at Microsoft.Azure.WebJobs.JobHost.CallAsync(MethodInfo method, IDictionary`2 arguments, CancellationToken cancellationToken)
[04/16/2019 23:21:16 > 6b9633: ERR ]    at XXX.Program.Main() in C:\XXX\Program.cs:line 286
[04/16/2019 23:21:16 > 6b9633: SYS INFO] Status changed to Failed
[04/16/2019 23:21:16 > 6b9633: SYS ERR ] Job failed due to exit code -532462766

我想我正在使用这种方法:

public System.Threading.Tasks.Task CallAsync(System.Reflection.MethodInfo method, [System.Threading.CancellationToken cancellationToken = null])

Microsoft.Azure.WebJobs.JobHost 的成员

总结: 调用作业方法。

参数:

method:要调用的作业方法。
cancelToken:监控取消请求的令牌。

返回:

将调用作业方法的 System.Threading.Tasks.Task。

但是看起来使用了一些覆盖方法。

我的调用方法有以下签名:

private static async Task Auth()

如何正确调用,避免出错?

【问题讨论】:

    标签: c# .net azure azure-webjobs


    【解决方案1】:

    GetMethod(string) 是获取公共方法,但您将其声明为私有,因此它返回 null。将方法更改为 public 应该可以工作。

    PS:您可以使用nameof关键字来避免使用字符串文字来识别您的方法typeof(Program).GetMethod(nameof(Program.Auth))

    【讨论】:

    • 我将身份验证可见性更改为公开,我也在使用您的方法进行调用。错误消息更改为:[ERR] Unhandled Exception: System.InvalidOperationException: 'System.Threading.Tasks.Task Auth()' can't be invoked from Azure WebJobs SDK。是否缺少 Azure WebJobs SDK 属性? [04/17/2019 11:37:56 > 6b9633:SYS INFO] 状态更改为失败 [04/17/2019 11:37:56 > 6b9633:SYS ERR] 由于退出代码 -532462766,作业失败
    • 我不太确定。你的Program 课程也是公开的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多