3

创建新的QueueTriggerAzure 函数时,我想将string输入切换为CloudQueueMessage.

我已将签名更改为:

public async static Task Run([QueueTrigger("%queue-name%", Connection = "AzureStorageConnection")]CloudQueueMessage myQueueItem, TraceWriter log)

我收到以下错误:

8/15/17 12:16:07 AM] Function started (Id=a137d868-1256-4a67-a225-8a95fb0e31fb) [8/15/17 12:16:07 AM] Executing 'TokenRefresh' (Reason='New queue message detected on 'refreshtoken'.', Id=a137d868-1256-4a67-a225-8a95fb0e31fb) [8/15/17 12:16:07 AM] A ScriptHost error has occurred [8/15/17 12:16:07 AM] Exception while executing function: TokenRefresh. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'myQueueItem'. mscorlib: String reference not set to an instance of a String. [8/15/17 12:16:07 AM] Parameter name: s.

函数应用程序正确弹出项目,然后因为它抛出快速异常,该队列中的所有项目都进入毒队列。我正在使用最新的函数 sdk 和 windows azure sdk nuget 包。

4

2 回答 2

1

根据您的描述,我在 Azure 门户上检查了此问题。我发现它可以工作,这是我run.csx文件下的代码片段,如下所示:

#r "Microsoft.WindowsAzure.Storage"
using System;
using Microsoft.WindowsAzure.Storage.Queue;

[FunctionName("QueueTriggerCSharp")]
public static void Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]CloudQueueMessage myQueueItem, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem.AsString}");
}

结果:

2017-08-15T07:35:27.104 功能已启动(Id=0ed03b74-bc9c-408a-9607-55e2942f1d50)

2017-08-15T07:35:27.214 C# 队列触发函数处理:样本队列数据

2017-08-15T07:35:27.214 功能完成(成功,Id=0ed03b74-bc9c-408a-9607-55e2942f1d50,持续时间=108ms)

正如 garth mason 提到的,然后我使用 VS 2017 函数类库在本地检查了它。另外,我发现了一个类似的问题How to change the parameters types using a queue trigger and a VS 2017 function class library和这个git issue,你可以参考他们来解决这个问题。

于 2017-08-15T08:13:11.573 回答
1

事实证明,这是尝试使用Windows.AzureStorage v8.2.1而不是v7.2.1绑定重定向的结果。由于CloudQueueMessage对象在版本之间不匹配,因此您必须使用 Functions 运行时所依赖的依赖项。

功能 PM 确认: https ://twitter.com/lindydonna/status/897333107354869760

还有一个冗长的问题线程,关于它们何时允许其他依赖版本的状态: https ://github.com/Azure/azure-webjobs-sdk-script/issues/992

于 2017-08-15T15:51:23.367 回答