У меня есть два проекта.
Во-первых, WebApi
, который содержит концентратор для использования SignalR
:
public class NotificationsHub : Hub
{
public async Task GetUpdateForServer(string call)
{
await this.Clients.Caller.SendAsync("ReciveServerUpdate", call);
}
}
Я настроил этот концентратор в Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ofc there is other stuff here
services.AddHttpContextAccessor();
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSignalR(routes => routes.MapHub<NotificationsHub>("/Notifications"));
}
Я верю, что я буду делать уведомления, как это в TaskController.cs
:
[HttpPost]
public async Task<IActionResult> PostTask([FromBody] TaskManager.Models.Task task)
{
if (!this.ModelState.IsValid)
{
return this.BadRequest(this.ModelState);
}
this.taskService.Add(task);
//here, after POST i want to notify whole clients
await this.notificationsHub.Clients.All.SendAsync("NewTask", "New Task in database!");
return this.Ok(task);
}
Проблема начинается здесь.
У меня есть WPF
приложение, которое содержит HubService
:
public class HubService
{
public static HubService Instance { get; } = new HubService();
public ObservableCollection<string> Notifications { get; set; }
public async void Initialized()
{
this.Notifications = new ObservableCollection<string>();
var queryStrings = new Dictionary<string, string>
{
{ "group", "allUpdates" }
};
var hubConnection = new HubConnection("https://localhost:44365/Notifications", queryStrings);
var hubProxy = hubConnection.CreateHubProxy("NotificationsHub");
hubProxy.On<string>("ReciveServerUpdate", call =>
{
//todo
});
await hubConnection.Start();
}
}
И я инициализирую его в своем конструкторе MainViewModel
:
public MainWindowViewModel()
{
HubService.Instance.Initialized();
}
Проблема начинается в await hubConnection.Start();
.Из этой строки я получаю сообщение об ошибке:
"StatusCode: 404, ReasonPhrase:« Not Found », версия: 1.1, Content: System.Net.Http.StreamContent, заголовки: X-SourceFiles:? = UTF-8 B QzpcVXNlcnNcQWRtaW5cc291cmNlXHJlcG9zXFRhc2tNYW5hZ2VyXFRhc2tNYW5hZ2VyLXdlYmFwaVxOb3RpZmljYXRpb25zXHNpZ25hbHJcbmVnb3RpYXRl = Дата:? Вт, 28 мая 2019 16:25:13 GMT Сервер: Kestrel X-Powered-By: ASP.NET Content-Length: 0
1032
У меня вопрос, что я делаю не так и как подключиться к Hub в моем WebApi
проекте?
EDIT
Hub, кажется, работает. Я набрал в своем браузере: https://localhost:44365/notifications
и я получил сообщение:
Требуется идентификатор подключения
EDIT2
WPF
проект .NET Framework 4.7.2
и WebApi
равно Core 2.1
.