2

I have a .Net Core 3.0 console project which includes WebJob function that has an output binding to Azure Signal R. The app builds OK, but when I run it and try to send a message out via SignalR I get the following error:

{System.MissingMethodException: Method not found: 'System.String Microsoft.Azure.SignalR.AuthenticationHelper.GenerateAccessToken(System.String, System.String, System.Collections.Generic.IEnumerable`1<System.Security.Claims.Claim>, System.TimeSpan, System.String)'.
at Microsoft.Azure.SignalR.Management.RestApiAccessTokenGenerator.Generate(String audience, Nullable`1 lifetime)
at Microsoft.Azure.SignalR.Management.RestApiProvider.GenerateRestApiEndpoint(String path, Nullable`1 lifetime)
at Microsoft.Azure.SignalR.Management.RestApiProvider.GetSendToGroupEndpoint(String groupName, Nullable`1 lifetime)
at Microsoft.Azure.SignalR.Management.RestHubLifetimeManager.SendGroupAsync(String groupName, String methodName, Object[] args, CancellationToken cancellationToken)
at Microsoft.AspNetCore.SignalR.Internal.GroupProxy`1.SendCoreAsync(String method, Object[] args, CancellationToken cancellationToken)
at Microsoft.Azure.WebJobs.Extensions.SignalRService.AzureSignalRClient.SendToGroup(String groupName, SignalRData data)
at Microsoft.Azure.WebJobs.Extensions.SignalRService.SignalRAsyncCollector`1.AddAsync(T item, CancellationToken cancellationToken)
at InSysWebJobP300DataProcessor.Helper.ProcessMinuteData(Message message, ConnectionMultiplexer redisConnection, IAsyncCollector`1 signalRMessages, ILogger log) in E:\InergySystems\GitHub\InSysCore\InSysWebJobP300DataProcessor\Helper.cs:line 125}

The SignalR service is registered in Program.Main with:

static void Main(string[] args)
{
    var builder = new HostBuilder();
    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddServiceBus().AddSignalR();
    });
    builder.ConfigureLogging((context, b) =>
    {
        b.ClearProviders();
        b.AddConfiguration(context.Configuration.GetSection("Logging"));
        if (context.HostingEnvironment.IsDevelopment())
        {
            b.AddConsole();
        }
    });

    var host = builder.Build();
    using (host)
    {
        host.Run();
    }
}

I have a function with the following signature:

[FunctionName("ProcessMinuteData")]
public async Task RunAsync([ServiceBusTrigger("data", Connection = "AzureWebJobsServiceBusConnection")]Message message, [SignalR(HubName = "insyshub")] IAsyncCollector<SignalRMessage> signalRMessages, ILogger log)

The messages are received from the service bus are processed fine, but trying to push out a message via SignalR using the following, results in the error above:

await signalRMessages.AddAsync(new SignalRMessage
{
    GroupName = "GroupName",
    Target = "targetMethod",
    Arguments = new[] { JsonConvert.SerializeObject(message) }
});

Note that the app does not need to receive messages via SignalR, just push them out.

I have the following NuGet packages installed:

<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.SignalR" Version="1.2.1" />
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.14" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.5" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.0.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.SignalRService" Version="1.0.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.10" />
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.14" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.0.1" />
ProfNimrod
  • 4,142
  • 2
  • 35
  • 54

1 Answers1

8

It seems that since Microsoft.Azure.SignalR 1.2.0 you now need to include Microsoft.Azure.SignalR.Management if you want to use the approach I am using detailed in the question.

Before 1.2.0 you didn't need to include Microsoft.Azure.SignalR.Management.

ProfNimrod
  • 4,142
  • 2
  • 35
  • 54