I have tried every example I can find on the web, and any sort of attempt to do this:
(Message message, string lockToken, MessageReceiver messageReceiver, ILogger log)
using either MessageReceiver or the underlying interface, I get this error:
Microsoft.Azure.WebJobs.Host: Can't bind parameter 'messageReceiver' to type 'Microsoft.ServiceBus.Messaging.MessageReceiver'.
I tried setting it up for injecting using the Lazy interface with no luck.
I am using the [ServiceBusTrigger]
On my side it seems no problem.
Please check:
Function1.cs
using System;
using Microsoft.Azure.ServiceBus.Core;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace FunctionApp16
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([ServiceBusTrigger("myqueue", Connection = "str")]string myQueueItem, ILogger log, MessageReceiver messageReceiver, string lockToken)
{
messageReceiver.RenewLockAsync(lockToken);
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
}
ProjectName.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.ServiceBus" Version="3.0.0-beta8" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
On my side, MessageReceiver is from namespace Microsoft.Azure.ServiceBus.Core
send message:
from azure.servicebus import ServiceBusClient
from azure.servicebus import QueueClient, Message
str = "Endpoint=sb://testbowman.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxx"
queue_client = QueueClient.from_connection_string(str, "myqueue")
msg = Message('Test Message')
queue_client.send(msg)
print('Already send.')
return with no error: