Попытка настроить сервер SignalR в приложении WPF Windows с использованием .NET Core 3.0.Все примеры, которые я могу найти, предполагают, что у каждого есть файл startup.cs с методом Configure (), где я могу вызвать UseSignalR.Но я неУ меня есть класс "App", полученный из Application.(Возможно, мне не хватает чего-то фундаментального в WPF / Core / Win, не связанного с SignalR)
Извлечение кода:
public partial class App : Application
{
public IServiceProvider ServiceProvider { get; private set; }
public IConfiguration Configuration { get; private set; }
protected override void OnStartup(StartupEventArgs e)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
Configuration = builder.Build();
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
ServiceProvider = serviceCollection.BuildServiceProvider();
var mainWindow = ServiceProvider.GetRequiredService<MainWindow>();
mainWindow.Show();
}
private void ConfigureServices(IServiceCollection services)
{
services.AddTransient(typeof(MainWindow));
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
services.AddSignalR().AddHubOptions<TestHub>(options =>
{
options.EnableDetailedErrors = true;
});
}
Пока все хорошо, поскольку он по крайней мере компилируется и запускается, если еще не сделать ничего осязаемого.
Я полагаю, что теперь мне нужно на самом деле настроить концентратор:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSignalR((configure) =>
{
var desiredTransports =
HttpTransportType.WebSockets |
HttpTransportType.LongPolling;
configure.MapHub<TestHub>("/testhub", (options) =>
{
options.Transports = desiredTransports;
});
});
}
Но этот метод никогда не вызывается - я не верю, что он должен из приложения, но из StartUp.
Наконец, мой класс-концентратор:
class TestHub : Hub
{
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Компилируется нормально, но я не думаю, что концентратор на самом деле работает, поэтому он ничего не делает, конечно.
Есть ли что-то другое, что я должен сделать, чтобы запустить и правильно настроить концентратор в этом типе установки?
FWIW Я использовал SignalR в стандартной .NET Framework (не Core) с приложениями WinFormsбез проблем, так что я смутно знаком с концепциями, просто не знаком с способом Core / WPF / Win.
Большое спасибо.