ฉันกำลังพยายามเชื่อมต่อระหว่างแอปพลิเคชัน ASP.NET Core 3.0 Blazor (ฝั่งเซิร์ฟเวอร์) กับ Azure SignalR Service ฉันจะลงเอยด้วยการฉีดไคลเอนต์ SignalR (บริการ) ของฉันไปยังองค์ประกอบ Blazor บางอย่างเพื่อให้พวกเขาอัปเดต UI / 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 เป็นผลมาจากคีย์ / สายอักขระการเชื่อมต่อขาดหายไป?
Uri
และสร้างหนึ่งที่สมบูรณ์ผ่านUri (Uri, สตริง)
.WithUrl(signalRConfig.Url + signalRConfig.HubName)
คุณสามารถตรวจสอบสิ่งนี้ได้ว่ามีผลใน URL ที่ถูกต้อง? (โดยเบรกพอยต์หรือการบันทึก?)