Recently I need to upgrade my Azure function from WebJobs.ServiceBus
to Azure.Function.SDK
.
I need to upgrade this because I was getting the application configuration version issue.
After upgrading to Azure Function Service Bus SDK, my function is no longer working and I get this error:
Microsoft.Azure.Functions.Worker.FunctionInputConverterException: Error converting 1 input parameters for Function 'Function1': Cannot convert input parameter 'myQueueItem' to type 'System.String[]' from type 'System.String'.
Would anyone please look into it and help me solving this problem?
Thank you for your time
Rushi
My code - MyFunction.csproj
:
<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>
My Program.cs
file:
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();
}
}
}
My function.cs
file:
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}");
}
}
}
I am getting this error:
I tried various ways, removing and ensure to have the latest packages.
I followed these articles:
You're missing IsBatched
on your trigger.
Also, if you're planning on using ServiceBusMessageActions
you'll need to receive messages as 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);
}
}