@andrey71
Добрый день! Прошу вашего совета в таком моменте : существует приложение web api (.NET Core 3.1), которое при получении данных должно отобразить сообщение на сайте с помощью SignalR. Технически у меня всё получилось, но реализация мне не нравится, т.к. соединение с сервером где находится хаб устанавливается каждый раз.
Как правильно сделать, что бы соединение устанавливалось однократно при запуске приложения web api?
Как правильно сделать, что бы соединение устанавливалось однократно при запуске приложения web api?
Спасибо!
public class SendToSignalR
{
HubConnection connection;
public SendToSignalR()
{
try
{
connection = new HubConnectionBuilder()
.WithUrl("https://localhost:5176/chat")
.Build();
Console.WriteLine("Connect to signalr");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
public async Task SendMessage(string message)
{
try
{
await connection.StartAsync();
await connection.InvokeAsync("Broadcast", message);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
Решения вопроса 1
@Lapish72
Нет примера вызова методов из вашего класса, но могу предположить, что вы каждый раз инициализируете его. Вам нужно сделать ваш класс Singleton’ом. Для этого в Startup ConfigureServices зарегистрируйте ваш сервис:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ВашСервис>();
}
}
И затем в Program:
public class Program
{
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
var service = host.Services.GetRequiredService<ВашСервис>();
service.ConnectToServer(); //Подключаемся к SignalR
host.Run();
}
}
UPD:
Советую поменять название класса на более общее, например, SignalrService, а метод SendToSignalR на Connect.
Ответы на вопрос 0