Search code examples
azureazureservicebus

Cannot bind to MessageReciever in Azure ServiceBus function


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]


Solution

  • 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:

    enter image description here