Tôi đang cố gắng tạo kết nối giữa ứng dụng ASP.NET Core 3.0 Blazor (phía máy chủ) và Dịch vụ Azure SignalR. Cuối cùng tôi sẽ đưa ứng dụng khách (dịch vụ) SignalR của mình vào một vài thành phần Blazor để họ sẽ cập nhật UI / DOM của tôi trong thời gian thực.
Vấn đề của tôi là tôi nhận được thông báo sau khi tôi gọi .StartAsync()
phương thức của mình trên kết nối trung tâm:
Mã trạng thái phản hồi không biểu thị thành công: 404 (Không tìm thấy).
BootstrapSignalRClient.cs
Tệp này tải cấu hình của tôi cho Dịch vụ SignalR bao gồm URL, chuỗi kết nối, khóa, tên phương thức và tên trung tâm. Các cài đặt này được ghi lại trong lớp tĩnh SignalRServiceConfiguration
và được sử dụng sau.
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; }
}
Tín hiệuRClient.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);
}
}
Tôi có kinh nghiệm sử dụng SignalR với .NET Core khi bạn thêm nó để Startup.cs
tệp sử dụng .AddSignalR().AddAzureSignalR()
và ánh xạ một hub trong cấu hình ứng dụng và thực hiện theo cách này yêu cầu các tham số 'cấu hình' nhất định phải được thiết lập (ví dụ: chuỗi kết nối).
Với tình huống của tôi, HubConnectionBuilder
lấy chuỗi kết nối hoặc khóa để xác thực Dịch vụ SignalR ở đâu?
Có thể thông báo 404 là kết quả của chuỗi khóa / kết nối bị thiếu?
Uri
và xây dựng một cái hoàn chỉnh thông qua Uri (Uri, chuỗi)
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
Bạn có thể xác minh điều này dẫn đến Url chính xác không? (Bằng điểm dừng hoặc đăng nhập?)