У меня есть процесс, который выполняется в долговременной устойчивой функции. Когда этот процесс завершится, я хочу отправить сообщение группе пользователей через мою службу Azure Signal R. Нам нужно отправлять через службу Azure, поскольку мы используем Azure Front Door, которая в настоящее время блокирует запросы веб-сокетов. Наше приложение blazor уже подключено к службе Azure signal R и использует ее, поэтому его нельзя изменить на бессерверное.
У меня есть приложение blazor в .Net 9, где я создал концентратор для отслеживания сообщений.
Проблема в том, что каждый раз, когда я запускаю StartAsync() при подключении к концентратору, я получаю ответ 400 без подробностей о том, почему.
Это мое Хаб
Код: Выделить всё
public class AdvisorMessagesHub : Hub
{
public async Task SendTestMessage(string name, string message)
{
Console.WriteLine($"### - [{Context.ConnectionId}] Send Test Message [{name}]: {message}");
await Clients.All.ReceiveTestMessage(name, message);
}
public async Task JoinAdvisorGroupAsync(long advisorId)
{
Console.WriteLine($"### - [{Context.ConnectionId}] Join Advisor Group [{advisorId}]");
await Groups.AddToGroupAsync(Context.ConnectionId, advisorId.ToString());
}
}
Код: Выделить всё
private HubConnection InitializeAzureSignalR()
{
try
{
var serviceUtils = new ServiceUtils(_configService.GetConfigurationValue(ConfigurationConstants.ConfigurationKeys.SignalR.SignalRConnectionString));
var url = GetClientUrl(serviceUtils.Endpoint, SignalRHubConstants.HubNames.AdvisorMessages);
var connection = new HubConnectionBuilder()
.WithUrl(url, option =>
{
option.AccessTokenProvider = () =>
{
return Task.FromResult(serviceUtils.GenerateAccessToken(url));
};
})
.ConfigureLogging(config =>
{
config.SetMinimumLevel(LogLevel.Error);
})
.WithAutomaticReconnect()
.Build();
return connection;
}
catch (Exception e)
{
_logger.WriteException(e, "Error during connection to Azure SignalR Service");
throw;
}
}
private string GetClientUrl(string endpoint, string hubName)
{
return $"{endpoint}/client/?hub={hubName}";
}
Код: Выделить всё
ServiceUtilsОшибка происходит, когда я пытаюсь открыть соединение:
Код: Выделить всё
public async Task BeginMonitoringAsync(CancellationToken cancellationToken = default)
{
if (_connection.State == HubConnectionState.Disconnected)
{
await _connection.StartAsync(cancellationToken);
}
}
Код состояния ответа не указывает на успех: 400 (неверный запрос).
Подробнее здесь: https://stackoverflow.com/questions/798 ... re-signalr
Мобильная версия