我正在使用Azure函数,尝试使用输出队列来处理事情,但我一直运行时出现输出绑定错误。我想知道这是否与我装饰参数的方式有关?我已经看到如何使用单个队列作为返回值,但我需要有多个输出队列。Azure函数中的错误绑定字符串输出队列
函数定义:
using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Newtonsoft.Json; using Newtonsoft.Json.Linq;
namespace FunctionApp1 {
public static class TestItemAddQueueTrigger
{
[StorageAccount("AzureWebJobsStorage")]
[FunctionName("TestItemAddQueueTrigger")]
public static void Run([QueueTrigger("testitem-add")] string itemAdd,
TraceWriter log,
[Queue("testitem-added", Connection = "AzureWebJobsStorage")] out string itemAddedQueue)
{
dynamic message = JObject.Parse(itemAdd);
log.Info($"Received message\n{JsonConvert.SerializeObject(message, Formatting.Indented)}");
var itemAddedQueueMessage = new
{
};
itemAddedQueue = JsonConvert.SerializeObject(itemAddedQueueMessage);
log.Info($"Sent message to queue \"itemAddedQueue\"\n{JsonConvert.SerializeObject(itemAddedQueueMessage, Formatting.Indented)}");
}
} }
错误消息:
A ScriptHost error has occurred
[10/18/2017 4:31:27 PM] Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.TestItemAddQueueTrigger'. Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'itemAddedQueue' to type String&. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. config.UseServiceBus(), config.UseTimers(), etc.).
的NuGet出处:
Microsoft.NET.Sdk.Functions(1.0.6)Microsoft.Azure.WebJobs (2.1.0-beta4)Microsoft.Azure.WebJobs.Extensions(2.1.0-beta4)
Microsoft.Azure.WebJobs.Extensions.Http(1.0.0-BETA4)Newtonsoft.Json (9.0.1)System.ValueTuple(4.3.0)
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net47</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.6" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
解决方案文件:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2002
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FunctionApp1", "FunctionApp1\FunctionApp1.csproj", "{10F86A7D-5E03-41A9-8BBB-103C8E06E059}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{10F86A7D-5E03-41A9-8BBB-103C8E06E059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10F86A7D-5E03-41A9-8BBB-103C8E06E059}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10F86A7D-5E03-41A9-8BBB-103C8E06E059}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10F86A7D-5E03-41A9-8BBB-103C8E06E059}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B0A27606-232E-4B58-9586-12AB68E9CAC0}
EndGlobalSection
EndGlobal
尝试从'string'之前删除'out':'[Queue(“testitem-added”,Connection =“AzureWebJobsStorage”)] string itemAddedQueue' –
您的代码对我来说工作得很好。你参考哪个NuGet包? – Mikhail
@AndrésNava-.NET - 'out'关键字很重要。这是排队函数('[Queue] out string')和触发队列消息('[QueueTrigger] string')之间的区别 –