ASP.NET Core 3.0 Blazor (sunucu tarafı) uygulaması ile Azure SignalR Hizmeti arasında bağlantı kurmaya çalışıyorum. Sonunda SignalR istemcimi (hizmetini) birkaç Blazor bileşenine enjekte edeceğim, böylece UI / DOM'umu gerçek zamanlı olarak güncelleyecekler.
Benim sorunum .StartAsync()
hub bağlantısı yöntemimi çağırdığımda aşağıdaki iletiyi alıyorum olmasıdır :
Yanıt durum kodu başarıyı göstermiyor: 404 (Bulunamadı).
BootstrapSignalRClient.cs
Bu dosya, URL, bağlantı dizesi, anahtar, yöntem adı ve hub adı dahil SignalR Hizmeti için yapılandırmamı yükler. Bu ayarlar statik sınıfta yakalanır SignalRServiceConfiguration
ve daha sonra kullanılır.
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);
}
}
NETR ile NETR ile deneyim kullanma deneyimim var, bu yüzden Startup.cs
dosyayı kullanarak .AddSignalR().AddAzureSignalR()
ve uygulama yapılandırmasında bir hub eşleştirin ve bu şekilde yapmak belirli 'yapılandırma' parametreleri (yani bağlantı dizesi) kurulmasını gerektirir.
HubConnectionBuilder
Durumum göz önüne alındığında , bağlantı dizesini veya SignalR Hizmeti'nde kimlik doğrulaması yapmak için bir anahtarı nereden alır?
404 mesajının eksik anahtar / bağlantı dizesinin bir sonucu olması mümkün müdür?
Uri
ve Uri (Uri, dize)
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
Bunun doğru URL ile sonuçlandığını doğrulayabilir misiniz? (Kesme noktası veya kayıt ile mi?)