I'm using Azure SignalR in serverless mode. I've an Azure Function which receives events from Event Hub and sends messages to Azure SignalR.
[Function(nameof(EventHubEventsHandler))]
[SignalROutput(HubName = "userevents", ConnectionStringSetting = "SignalRConnectionSetting")]
public async Task<List<SignalRMessageAction>> Run([EventHubTrigger("userschanged", Connection = "EventHubConnectionSetting")] EventData[] events)
{
var messages = new List<SignalRMessageAction>();
foreach (EventData @event in events)
{
try
{
messages.Add(new SignalRMessageAction("userChanged")
{
Arguments = new[] { "user changed" },
});
}
catch (Exception ex)
{
...
}
}
return messages;
}
The connection string SignalRConnectionSetting
in Azure Function App settings is defined like Endpoint=https://xxx.service.signalr.net;AccessKey=yyy;Version=1.0;
Azure Function is triggered successfully, but in Application Insights I see that the attempt to send message to Azure SignalR fails with 403 forbidden.
What I see in the logs:
GET https://xxx.service.signalr.net/api/v1/auth/accessKey
Result code: 200
POST https://xxx.service.signalr.net/api/hubs/userevents/:send?api-version=2022-06-01
Result code: 403
System.Net.Http.HttpRequestException
Exception while executing function: Functions.EventHubEventsHandler Azure SignalR service runtime error. Request Uri: https://xxx.service.signalr.net/api/hubs/userevents/:send?api-version=2022-06-01 Response status code does not indicate success: 403 (Forbidden)
I've no clue what can be wrong.
Follow below steps to achieve your requirement.
Code Snippet:
[Function(nameof(EventHubEventsHandler))]
[SignalROutput(HubName = "userevents", ConnectionStringSetting = "SignalRConnectionSetting")]
public async Task<List<SignalRMessageAction>> Run([EventHubTrigger("kpeventhub", Connection = "EventHubConnectionString")] EventData[] events)
{
var messages = new List<SignalRMessageAction>();
foreach (EventData @event in events)
{
try
{
messages.Add(new SignalRMessageAction("userChanged")
{
Arguments = new[] { "user changed" },
});
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the event data.");
}
}
return messages;
}
Function App=>Environment Variables
:"EventHubConnectionString": "Endpoint=sb://<eventhubnamespace>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=y8TjnnTJA2XXXXXX7+AEhJudoTs=",
"SignalRConnectionSetting": "Endpoint=https://<signalr>.service.signalr.net;AccessKey=0vSNRXjzPnyQTQXXXXXnNZtC5pp8=;Version=1.0;"
Signal R service=>Monitoring
:Function App Invocations:
Live Trace: