由于绑定错误,Azure Webjob 无法启动

Azure Webjob Unable Start Due to Binding Error

我有一个 Web 作业,它应该从 Azure 队列中读取并对找到的有效负载执行某些操作。我遇到的问题是网络作业无法启动,这是错误

[02/17/2021 15:40:11 > e80592: INFO] [15:40:10 ERR] 错误索引方法 'Functions.ProcessStudentPerfQueueMessages' [02/17/2021 15:40:11 > e80592: INFO] Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException: 错误索引方法 'Functions.ProcessStudentPerfQueueMessages' [02/17/2021 15:40:11 > e80592:INFO] ---> System.InvalidOperationException:无法将参数 'message' 绑定到类型 'StudentMessage'。 [02/17/2021 15:40:11 > e80592: INFO] 在 Microsoft.Azure.WebJobs.Host.Bindings.Data.ClassDataBindingProvider`1.TryCreateAsync(BindingProviderContext 上下文)在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Bindings\Data\ClassDataBindingProvider.cs:第 35 行 [02/17/2021 15:40:11 > e80592: INFO] at Microsoft.Azure.WebJobs.Host.Bindings.Data.DataBindingProvider.TryCreateAsync(BindingProviderContext context) 在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Bindings\Data\DataBindingProvider.cs: 第 41 行 [02/17/2021 15:40:11 > e80592: INFO] 在 Microsoft.Azure.WebJobs.Host.Bindings.CompositeBindingProvider.TryCreateAsync(BindingProviderContext context) 在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs .Host\Bindings\BindingProviders\CompositeBindingProvider.cs:第 23 行 [02/17/2021 15:40:11 > e80592: INFO] 在 Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexMethodAsyncCore(MethodInfo 方法,IFunctionIndexCollector 索引,CancellationToken cancellationToken)在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft .Azure.WebJobs.Host\Indexers\FunctionIndexer.cs: 第 196 行 [02/17/2021 15:40:11 > e80592: INFO] 在 Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexMethodAsync(MethodInfo 方法,IFunctionIndexCollector 索引,CancellationToken cancellationToken)在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft .Azure.WebJobs.Host\Indexers\FunctionIndexer.cs: 第 149 行 [02/17/2021 15:40:11 > e80592: INFO] --- 内部异常堆栈跟踪结束 --- [02/17/2021 15:40:11 > e80592: INFO] 在 Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexMethodAsync(MethodInfo 方法,IFunctionIndexCollector 索引,CancellationToken cancellationToken)在 C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft .Azure.WebJobs.Host\Indexers\FunctionIndexer.cs: 第 157 行 [02/17/2021 15:40:11 > e80592: INFO] at Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexTypeAsync(Type type, IFunctionIndexCollector index, CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft .Azure.WebJobs.Host\Indexers\FunctionIndexer.cs: 第 85 行 [02/17/2021 15:40:13 > e80592: INFO] [15:40:13 FTL] Web 作业启动失败

这是代码

public class Functions
{
    private readonly IService _service;
    public Functions(IService service)
    {
         _service = service;
    }
    public async Task ProcessStudentPerfQueueMessages([QueueTrigger("studentperf")] StudentMessage message)
    {
         await new StudentPerfQueueProcessor(_pascoService).ProcessMessage(message));
     }

目前队列中没有任何消息。 如果我将 StudentMessage 更改为 string,则 Web 作业会在 Azure 中成功启动。这是一个 Net Core Webjob。请帮忙。

如 Azure 函数的 document 所述:

Access the message data by using a method parameter such as string paramName. You can bind to any of the following types:

  • Object - The Functions runtime deserializes a JSON payload into an instance of an arbitrary class defined in your code.

  • string

  • byte[]

  • CloudQueueMessage

不确定StudentMessage class 是如何定义的,但是如果使用string 类型可以满足您的需要,您可以考虑使用它。

这位同学class

public class StudentMessage
{
   public int StudentId { get; set; }
   public int SubjectId { get; set; }
   public StudentForm Form { get; set; }
   public Dictionary<int, AnswerStatus> QuestionAnswerStatus { get; set; }
   public string Message { get; set; }
   public DateTime Date { get; set; }
}

Doris Lv 让我想到了 StudentMessage class。我决定在 StudentMessage 中注释掉 Message 属性 和 bam!!它启动成功。必须是 Newtonsoft.json.