【问题标题】:Signalr, client says connected but not able to communicate by serverSignalr,客户端说已连接但无法通过服务器进行通信
【发布时间】:2017-02-01 13:22:23
【问题描述】:

我们有一个客户端和一个服务器,它们通过信号器进行通信。在客户端,当它第一次启动时,它能够通过信号器与服务器连接,并通过集线器与一些信号器方法进行通信。但是在特定事件之后,服务器无法通过信号器进行通信。但在客户端它显示为连接已连接。以下是与服务器连接后来自客户端的信号器跟踪日志。

9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: initialized)
9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {"C":"s-0,C5FA","S":1,"M":[]})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"I":"93"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - ChangeState(Connecting, Connected)
9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {"C":"s-0,C636","M":[{"H":"PrintConnectorHub","M":"Registered","A":[{"Connected":false,"ErrorCount":0,"InstalledBy":{"EmployeeId":1111,"Firstname":null,"Lastname":null},"Name":"*** ***","Server":{"ComputerName":"**","IPAddress":"****","MACAddress":"****","OperatingSystem":"Microsoft® Windows Server® 2008 Standard FE "},"Status":0,"Version":"1.4.4"}]}]})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"R":false,"I":"90"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - Callback with id 90 not found!
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"R":false,"I":"94"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"R":false,"I":"92"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - Callback with id 92 not found!
9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {})

在此之后,尽管客户端仍然是连接的服务器,但无法通过信号器向客户端发送任何消息。我们的 2 个客户端和所有客户端信号器跟踪日志都面临这个问题,它在连接被触发后显示了这些日志行。

9492fb51-e37b-4f6c-b184-536c87dd73f1 - SSE: OnMessage(Data: {"C":"s-0,C636","M":[{"H":"PrintConnectorHub","M":"Registered","A":[{"Connected":false,"ErrorCount":0,"InstalledBy":{"EmployeeId":1111,"Firstname":null,"Lastname":null},"Name":"*** ***","Server":{"ComputerName":"**","IPAddress":"****","MACAddress":"****","OperatingSystem":"Microsoft® Windows Server® 2008 Standard FE "},"Status":0,"Version":"1.4.4"}]}]})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"R":false,"I":"90"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - Callback with id 90 not found!
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"R":false,"I":"94"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - OnMessage({"R":false,"I":"92"})
9492fb51-e37b-4f6c-b184-536c87dd73f1 - Callback with id 92 not found!

41889ccd-5634-440a-95ef-fbbdcd340a19 - SSE: OnMessage(Data: {"C":"s-0,C634","M":[{"H":"PrintConnectorHub","M":"Registered","A":[{"Connected":false,"ErrorCount":0,"InstalledBy":{"EmployeeId":1111,"Firstname":null,"Lastname":null},"Name":"***","Server":{"ComputerName":"****","IPAddress":"****","MACAddress":"****","OperatingSystem":"Microsoft Windows Server 2008 R2 Standard "},"Status":0,"Version":"1.3.8"}]}]})
41889ccd-5634-440a-95ef-fbbdcd340a19 - SSE: OnMessage(Data: {})
41889ccd-5634-440a-95ef-fbbdcd340a19 - OnMessage({"R":false,"I":"611"})
41889ccd-5634-440a-95ef-fbbdcd340a19 - Callback with id 611 not found!
41889ccd-5634-440a-95ef-fbbdcd340a19 - OnMessage({"R":false,"I":"615"})
41889ccd-5634-440a-95ef-fbbdcd340a19 - OnMessage({"R":false,"I":"613"})
41889ccd-5634-440a-95ef-fbbdcd340a19 - Callback with id 613 not found!

我们正在使用 SQl 服务器和 SQL 服务器中的背板设置来使用横向扩展。上面的日志跟踪回调与 id not found 意味着什么,即使客户端日志显示为连接,服务器也无法与客户端通信可能是什么问题?

【问题讨论】:

  • 您是否在客户端停止/重用连接?您是否收到任何错误/重新连接?显示客户端代码。
  • 是的,在这些日志行之前触发了几个断开连接和重新连接事件

标签: c# sql-server websocket signalr signalr-backplane


【解决方案1】:

未找到 ID 为 613 的回调! 未找到 id 为 611 的回调!

它说在 Hub 上找不到合适的方法。 您是否检查过您在正确的集线器上调用了正确的方法名称?

您可以这样做检查调用方法和参数:
定义你的管道模块

public class MyPipelineModule : HubPipelineModule
{
    protected override bool OnBeforeIncoming(IHubIncomingInvokerContext context)
    {
        //context.Args
        //context.Hub
        //context.MethodDescriptor.Name
        return base.OnBeforeIncoming(context);
    }
}

在您配置 SignalR 的位置:

GlobalHost.HubPipeline.AddModule(new MyPipelineModule());

【讨论】:

  • 这些日志显示在客户端,而不是服务器中。
  • 是的,你能检查一下服务器端的一切是否正确吗?因为看起来您调用了错误的方法或使用了错误的集线器。
  • 是的,服务端调用的所有方法都在客户端。错误的集线器是什么意思?不同的服务器?
  • 您在服务器端或客户端缺少方法。您的日志表明 SignalR 无法找到方法。您需要在客户端检查服务器正在调用的方法确实存在,并且您需要检查客户端调用的方法在服务器端确实存在并且调用集线器的名称是否正确。清楚吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 2011-04-28
相关资源
最近更新 更多