Клиент .NET Core SignalR не подключается к концентратору ASP.NET Core - PullRequest
1 голос
/ 20 мая 2019

У меня есть веб-API ASP.NET Core с концентратором SignalR и консольное приложение .NET Core, которое выступает в качестве клиента для концентратора.

Консольное приложение выдает следующую ошибку при попытке подключения:

System.AggregateException
  HResult=0x80131500
  Message=One or more errors occurred. (StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers:
{
  Date: Mon, 20 May 2019 18:12:44 GMT
  Server: Kestrel
  Content-Length: 0
})
  Source=System.Private.CoreLib
  StackTrace:
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at SurveyApp.NotificationClient.Program.Main(String[] args) in C:\Users\user\source\repos\SurveyApp\SurveyApp.NotificationClient\Program.cs:line 16

Inner Exception 1:
HttpClientException: StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers:
{
  Date: Mon, 20 May 2019 18:12:44 GMT
  Server: Kestrel
  Content-Length: 0
}

Я перепробовал все виды переименования маршрутов и узлов, но он все еще не работает. Также попробовал решение, показанное здесь, так как это - похожая проблема, но все еще не результат: HttpClientException при подключении к рабочему концентратору из SignalR .NET Client

Сервер: DI регистрация:

            services.AddSignalR();

Регистрация промежуточного программного обеспечения:

            ...

            app.UseSignalR(route =>
            {
                route.MapHub<NotificationHub>("/notificationhub");
            });
            app.UseMvc();

Класс концентратора:

public class NotificationHub : Hub
    {
        public Task SendMessage(string message)
        {
            return Clients.All.SendAsync(message);
        }

        public override Task OnConnectedAsync()
        {
            Console.WriteLine("A client connected");
            return base.OnConnectedAsync();
        }
    }

Код клиента:

static void Main(string[] args)
        {
            var connection = new HubConnection("https://localhost:5001/notificationhub");
            connection
                .CreateHubProxy("NotificationHub")
                .On<string>("ReceiveNotification", Console.WriteLine);
            connection.Start().Wait();
            Console.WriteLine("Connection started");
            Console.ReadKey();
        }

Когда я не вызываю Wait () после connection.Start (), я не получаю никакой ошибки, но клиент все равно не подключается. Я использую .NET Core 2.2 как на сервере, так и на клиенте, а версия для Nuget SignalR - 2.4.1

1 Ответ

3 голосов
/ 21 мая 2019

var connection = new HubConnection ("https://localhost:5001/notificationhub");

Эта конструкция больше не существует в ASP.NET Core. Похоже, вы подключаете сервер ASP.NET Core SignalR с Microsoft.AspNet.SignalR.Client , который должен работать с ASP.NET SignalR и не совместим с ASP.NET Core.

Если это так, вам нужно добавить ссылку на Microsoft.AspNetCore.SignalR.Client, которая предназначена для .NETStandard 2.0 и должна быть в состоянии работать также на .NET Framework.

А затем создайте соединение, как показано ниже:

var Connection = new HubConnectionBuilder()
    .WithUrl("https://localhost:5001/notificationhub")
    .ConfigureLogging(logging =>{
        logging.AddConsole();
    })
    .Build();

Подробнее см. https://docs.microsoft.com/en-us/aspnet/core/signalr/dotnet-client?view=aspnetcore-2.2#connect-to-a-hub

...