最近我需要将我的Azure功能从WebJobs.ServiceBus升级到Azure.Function.SDK。
我需要升级它,因为我遇到了应用程序配置版本问题。
升级到 Azure Function Service Bus SDK 后,我的函数不再工作并出现以下错误
Microsoft.Azure.Functions.Worker.FunctionInputConverterException:转换函数“Function1”的 1 个输入参数时出错:无法将输入参数“myQueueItem”从类型“System.String”转换为类型“System.String[]”。
有人可以调查一下并帮助我解决这个问题吗?
感谢您的宝贵时间
如是
我的代码 我的函数.CSPRJ
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.21.0" />
<PackageReference Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="6.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.2.0" />
<PackageReference Include="Microsoft.Dynamics.Sdk.Messages" Version="0.5.17" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="6.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.19.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.ServiceBus" Version="5.14.1" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.15.1" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
我的程序.CS文件
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace CFX.Alerts.SBProcessor
{
public class Program
{
public static void Main()
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices((hostContext, services) =>
{
var serviceProvider = services.BuildServiceProvider();
var logger = serviceProvider.GetService<ILogger<Function1>>();
services.AddSingleton(typeof(ILogger), logger);
})
.Build();
host.Run();
}
}
}
我的函数.CS 文件
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace CFX.Alerts.SBProcessor
{
public class Function1
{
[Function("Function1")]
public void Run([ServiceBusTrigger("customer.dev", Connection = "AzureWebJobsServiceBus")]
string[] myQueueItem, ServiceBusMessageActions messageActions, ILogger log)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
}
我尝试了各种方法,删除并确保拥有最新的软件包。
我关注了以下文章
https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus
https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger
您的扳机上缺少
IsBatched
。
另外,如果您计划使用 ServiceBusMessageActions
,您将需要以 ServiceBusReceivedMessage[]
的形式接收消息。
[Function(nameof(ServiceBusReceivedMessageBatchFunction))]
public void ServiceBusReceivedMessageBatchFunction(
[ServiceBusTrigger("queue", Connection = "ServiceBusConnection", IsBatched = true)] ServiceBusReceivedMessage[] messages)
{
foreach (ServiceBusReceivedMessage message in messages)
{
_logger.LogInformation("Message ID: {id}", message.MessageId);
_logger.LogInformation("Message Body: {body}", message.Body);
_logger.LogInformation("Message Content-Type: {contentType}", message.ContentType);
}
}