由于绑定错误,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.
我有一个 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.