SignalR核心控制台客户端未收到通知

约翰

我环顾了一些类似的问题,却没有弄清楚这个问题。我的.NET核心Web API项目中有一个简单的Hub。这是集线器:

 public class NotificationHub : Hub<INotificationClient>
{
  public async Task SendMessage(string user, string msg)
    {
        await Clients.All.ReceiveMessage(user, msg);
    }
    public Task SendMessageToCaller(string msg)
    {
        return Clients.Caller.ReceiveMessage(msg);
    }

    public Task SendMessageToPartner(string user, string msg)
    {
        return Clients.Client(user).ReceiveMessageToPartner(msg);
    }
}

这是接口:

 public interface INotificationClient
{
    Task ReceiveMessage(string user, string msg);
    Task ReceiveMessage(string msg);
    Task ReceiveMessageToPartner( string msg);

}

这是来自控制器的代码:

[Route("[controller]")]
[ApiController]
public class NotificationsController : ControllerBase
{
    private IHubContext<NotificationHub> _hub;

    public NotificationsController(IHubContext<NotificationHub> hub)
    {
        _hub = hub;

    }
    [HttpGet]
    public async Task<IActionResult> Get()
    {
        var msg = new NotificationData { ClientId = "12345", Notification = "Somone just connected" };
        await _hub.Clients.All.SendAsync("Notification", msg);
        return Ok(new { Message = "Request complete" });
    }
}

最后是控制台客户端代码:

 Console.WriteLine("Press a key to start listening");
        Console.ReadKey();

        Console.WriteLine("Client Listening!");
        var connection = new HubConnectionBuilder()
           .WithUrl("http://localhost:61514/notifications")

           .Build();


        connection.On<NotificationData>("Notification", (notificationData) =>
            Console.WriteLine($"Somebody connected: {notificationData.ClientId}"));

        connection.StartAsync().GetAwaiter().GetResult();

        Console.WriteLine("Listening. Press a key to quit");
        Console.ReadKey();

这是带有映射的Web应用程序的启动:

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR();
        services.AddControllers();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapHub<NotificationHub>("/Notifications");
        });
    }

我不断收到此错误:System.IO.IOException:'在开始握手之前,服务器已断开连接。在这里,我一定会丢失一些东西。

更新:
打开日志并收到此错误:

dbug:Microsoft.AspNetCore.Http.Connections.Client.HttpConnection [8]与位于http:// localhost:61514 / notifications服务器建立连接dbug:Microsoft.AspNetCore.Http.Connections.Client.HttpConnection [9]与服务器建立连接'BdROAEEQnGUeDYAW5EspRA'。dbug:Microsoft.AspNetCore.Http.Connections.Client.HttpConnection [7]使用网址开始传输“ ServerSentEvents”:http:// localhost:61514 / notifications信息:Microsoft.AspNetCore.Http.Connections.Client.Internal.ServerSentEventsTransport [1]开始传输。传输方式:文本。dbug:Microsoft.AspNetCore.Http.Connections.Client.Internal.ServerSentEventsTransport [3]开始接收循环。dbug:Microsoft.AspNetCore.Http.Connections.Client.Internal.ServerSentEventsTransport [9]收到30个字节。解析SSE框架。dbug:Microsoft.AspNetCore.Http.Connections.Client.Internal.ServerSentEventsTransport [4]接收循环已停止。dbug:Microsoft.AspNetCore.Http.Connections.Client.Internal.ServerSentEventsTransport [100]启动发送循环。dbug:Microsoft.AspNetCore.Http.Connections.Client.HttpConnection [18]传输“ ServerSentEvents”已启动。dbug:Microsoft.AspNetCore.Http.Connections.Client.Internal.ServerSentEventsTransport [102]发送循环已取消。dbug:Microsoft.AspNetCore.Http。Connections.Client.Internal.ServerSentEventsTransport [101]发送循环已停止。未处理的异常。信息:Microsoft.AspNetCore.Http.Connections.Client.HttpConnection [3] HttpConnection已启动。信息:Microsoft.AspNetCore.SignalR.Client.HubConnection [24]使用HubProtocol'json v1'。System.IO.IOException:在握手开始之前,服务器已断开连接。在Microsoft.AspNetCore.SignalR.Client.HubConnection.StartAsyncCore(CancellationToken cancellingToken) ),位于System.Threading的Microsoft.AspNetCore.SignalR.Client.HubConnection.StartAsyncInner(CancellationToken cancelleToken)处。

约翰

因此,整整一天地反复思考之后,我发现了问题所在,所以我认为我将在此处发布解决方案,以防其他人遇到此问题。

集线器端点指向控制器。因此,当客户端进行链接时,它两次敲击控制器,导致服务器关闭连接。所以我改变了这一行:

app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapHub<NotificationHub>("/Notify");
        });

从击中控制器的“ / Notifications”到上述代码中的“ Notify”,将客户端从Notifications重新指向Notify

 var connection = new HubConnectionBuilder()
           .WithUrl("http://localhost:61514/Notify")
          .ConfigureLogging(logging =>
          {
              logging.AddConsole();
              logging.SetMinimumLevel(LogLevel.Debug);
          })
           .Build();

消息开始流入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SignalR 2.0 .NET控制台客户端

来自分类Dev

SignalR客户端未收到服务器消息

来自分类Dev

GCM客户端未收到推送通知

来自分类Dev

Azure SignalR服务| Asp.Net Web API | 控制台客户端

来自分类Dev

控制台应用程序SignalR客户端断开连接超时

来自分类Dev

ZeroMQ C ++客户端未收到

来自分类Dev

ADM客户端未收到消息

来自分类Dev

推荐的控制台ftp客户端

来自分类Dev

推荐的控制台ftp客户端

来自分类Dev

从JS客户端在SignalR控制台应用程序上进行身份验证

来自分类Dev

在C#控制台应用程序中实现的gRPC中收到的客户端证书为空

来自分类Dev

发生SessionSubscribeEvent时,踩踏客户端未收到消息/通知

来自分类Dev

发生SessionSubscribeEvent时,踩踏客户端未收到消息/通知

来自分类Dev

在 iOS 设备上未收到 Firebase 推送通知。尽管控制台记录了消息,但它是在设备上收到的

来自分类Dev

客户端代码未收到发布的模型

来自分类Dev

Android客户端未收到服务器回复

来自分类Dev

WCF服务客户端未收到流消息

来自分类Dev

未收到Indy TCP客户端数据

来自分类Dev

java http apache客户端未收到内容

来自分类Dev

Android客户端未收到服务器回复

来自分类Dev

WCF日志记录:客户端未收到响应

来自分类Dev

GCM android客户端未收到消息

来自分类Dev

TCP客户端未收到所有消息

来自分类Dev

NServiceBus 测试客户端未收到消息

来自分类Dev

客户端未收到 SFTP 文件传输

来自分类Dev

从网页启动客户端控制台应用程序

来自分类Dev

可以从控制台找到所有客户端集合吗?

来自分类Dev

防止使用控制台窗口在客户端自动触发点击事件

来自分类Dev

在网页中显示TXT文件-客户端/ JavaScript控制台

Related 相关文章

热门标签

归档