J'essaie d'établir une connexion entre mon application ASP.NET Core 3.0 Blazor (côté serveur) et le service Azure SignalR. Je finirai par injecter mon client SignalR (service) dans quelques composants Blazor afin qu'ils mettent à jour mon interface utilisateur / DOM en temps réel.
Mon problème est que je reçois le message suivant lorsque j'appelle ma .StartAsync()
méthode sur la connexion concentrateur:
Le code d'état de réponse n'indique pas la réussite: 404 (introuvable).
BootstrapSignalRClient.cs
Ce fichier charge ma configuration pour le service SignalR, y compris l'URL, la chaîne de connexion, la clé, le nom de la méthode et le nom du concentrateur. Ces paramètres sont capturés dans la classe statique SignalRServiceConfiguration
et utilisés ultérieurement.
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);
}
}
J'ai de l'expérience en utilisant SignalR avec .NET Core où vous l'ajoutez, de sorte que le Startup.cs
fichier utilisant .AddSignalR().AddAzureSignalR()
et mappant un concentrateur dans la configuration de l'application et le faire de cette manière nécessite l'établissement de certains paramètres de «configuration» (c'est-à-dire la chaîne de connexion).
Compte tenu de ma situation, où HubConnectionBuilder
obtient la chaîne de connexion ou une clé pour s'authentifier auprès du service SignalR?
Est-il possible que le message 404 soit le résultat de la clé / chaîne de connexion manquante?
Uri
et de construire l'intégralité via Uri (Uri, chaîne)
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
Pouvez-vous vérifier que cela aboutit à l'URL correcte? (Par point d'arrêt ou enregistrement?)