Я намагаюся встановити зв’язок між моїм додатком ASP.NET Core 3.0 Blazor (на стороні сервера) та службою Azure SignalR. Я в кінцевому підсумку введу мій клієнт SignalR (послугу) в декілька компонентів Blazor, щоб вони в режимі реального часу оновили мій інтерфейс користувача / DOM.
Моя проблема полягає в тому, що я отримую таке повідомлення, коли я викликаю свій .StartAsync()
метод на з'єднанні концентратора:
Код статусу відповіді не вказує на успіх: 404 (Не знайдено).
BootstrapSignalRClient.cs
Цей файл завантажує мою конфігурацію служби SignalR, включаючи URL, рядок з'єднання, ключ, ім'я методу та ім'я концентратора. Ці параметри фіксуються в статичному класі SignalRServiceConfiguration
та використовуються пізніше.
public static class BootstrapSignalRClient
{
public static IServiceCollection AddSignalRServiceClient(this IServiceCollection services, IConfiguration configuration)
{
SignalRServiceConfiguration signalRServiceConfiguration = new SignalRServiceConfiguration();
configuration.Bind(nameof(SignalRServiceConfiguration), signalRServiceConfiguration);
services.AddSingleton(signalRServiceConfiguration);
services.AddSingleton<ISignalRClient, SignalRClient>();
return services;
}
}
SignalRServiceConfiguration.cs
public class SignalRServiceConfiguration
{
public string ConnectionString { get; set; }
public string Url { get; set; }
public string MethodName { get; set; }
public string Key { get; set; }
public string HubName { get; set; }
}
SignalRClient.cs
public class SignalRClient : ISignalRClient
{
public delegate void ReceiveMessage(string message);
public event ReceiveMessage ReceiveMessageEvent;
private HubConnection hubConnection;
public SignalRClient(SignalRServiceConfiguration signalRConfig)
{
hubConnection = new HubConnectionBuilder()
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
.Build();
}
public async Task<string> StartListening(string id)
{
// Register listener for a specific id
hubConnection.On<string>(id, (message) =>
{
if (ReceiveMessageEvent != null)
{
ReceiveMessageEvent.Invoke(message);
}
});
try
{
// Start the SignalR Service connection
await hubConnection.StartAsync(); //<---I get an exception here
return hubConnection.State.ToString();
}
catch (Exception ex)
{
return ex.Message;
}
}
private void ReceiveMessage(string message)
{
response = JsonConvert.DeserializeObject<dynamic>(message);
}
}
У мене є досвід використання SignalR з .NET Core, куди ви додаєте його, щоб Startup.cs
файл використовував .AddSignalR().AddAzureSignalR()
і мабував концентратор у конфігурації програми, і це робиться таким чином, потрібно встановити певні параметри конфігурації (тобто рядок з'єднання).
З огляду на мою ситуацію, звідки береться HubConnectionBuilder
рядок з'єднання або ключ для аутентифікації до служби SignalR?
Чи можливо повідомлення 404 є результатом відсутності рядка ключа / з'єднання?
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
Чи можете ви переконатися, що це призводить до отримання правильної URL-адреси? (За точкою розриву чи входом?)