Saya mencoba membuat koneksi antara aplikasi ASP.NET Core 3.0 Blazor (sisi server) saya dan Layanan Azure SignalR. Saya akhirnya akan menyuntikkan klien SignalR saya (layanan) ke beberapa komponen Blazor sehingga mereka akan memperbarui UI / DOM saya secara waktu nyata.
Masalah saya adalah saya menerima pesan berikut ketika saya memanggil .StartAsync()
metode saya pada koneksi hub:
Kode status respons tidak menunjukkan keberhasilan: 404 (Tidak Ditemukan).
BootstrapSignalRClient.cs
File ini memuat konfigurasi saya untuk Layanan SignalR termasuk URL, string koneksi, kunci, nama metode, dan nama hub. Pengaturan ini ditangkap di kelas statis SignalRServiceConfiguration
dan digunakan nanti.
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);
}
}
Saya memiliki pengalaman menggunakan SignalR dengan .NET Core di mana Anda menambahkannya sehingga Startup.cs
file menggunakan .AddSignalR().AddAzureSignalR()
dan memetakan hub di konfigurasi aplikasi dan melakukannya dengan cara ini memerlukan parameter 'konfigurasi' tertentu untuk dibuat (yaitu string koneksi).
Mengingat situasi saya, di mana HubConnectionBuilder
mendapatkan string koneksi atau kunci untuk mengotentikasi ke Layanan SignalR?
Mungkinkah pesan 404 adalah hasil dari kunci yang hilang / string koneksi?
Uri
dan membangun yang lengkap melalui Uri (Uri, string)
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
Bisakah Anda memverifikasi ini menghasilkan Url yang benar? (Dengan breakpoint atau logging?)