【问题标题】:.NET Core 2.1 / Angular - SignalR takes exactly 2 minutes to connect to hub.NET Core 2.1 / Angular - SignalR 只需 2 分钟即可连接到集线器
【发布时间】:2018-06-01 08:19:27
【问题描述】:

我有一个 Ionic 应用程序,我希望它连接到我的套接字。这在 SignalR 预览中工作得很好,而且基本上仍然可以,但由于某种原因连接需要 2 分钟......

连接时我也遇到了一些错误:

这是我的 javascript 代码:

ngOnInit() {

    const connection = new signalR.HubConnectionBuilder()
          .withUrl("http://192.168.178.11:8040/socket?sessionId=3dc1dc11")
          .build();

    connection.on("ReceiveMessage", message => {
      console.log(message);

      this.zone.run(() => {
        if(this.locked == true) {
          this.locked = false
        } else {
          this.locked = true;
        }
      });

      console.log(this.locked);
    });

    connection.start().catch(err => console.error);

}

这是我的中心:

public class DeviceHub : Hub
{
        public override Task OnConnectedAsync()
        {
            var sessionId = Context.GetHttpContext().Request.Query["sessionId"];

            return Groups.AddToGroupAsync(Context.ConnectionId, sessionId);
        }
}

这是我在 Startup.cs 中的配置:

app.UseSignalR(routes =>
{
    routes.MapHub<DeviceHub>("/socket");
});

现在我的问题是:我该如何解决这个问题?

编辑 1:

延迟是在调用OnConnectedAsync() 方法之前。

编辑 2:

我认为我应该补充的另一件事是它直接向我的 API 发出请求:

ws://192.168.178.11:8040/socket?sessionId=3dc1dc11&id=Pt-JDlSPq2_WEIl-8cdPZA

而这正是需要两分钟才能完成的请求。

编辑 3:

我想指出的另一件事是我正在运行代理。我无法从手机直接连接到 API,因此我使用了proxy。我不知道这是否与它有关,但我只是想指出以防万一。

【问题讨论】:

  • 你能检查一下你的Groups.AddToGroupAsync(Context.ConnectionId, sessionId) 没有被屏蔽吗?
  • 嗯,我试过在上面放一个断点,但是两分钟后才触发。
  • 所以你是说在你的OnConnectedAsync() 方法被调用之前很长的延迟?如果是这样,这是重要信息,应该添加到您的问题中。
  • @PaulTurner 是的,我已将其添加到问题中。
  • 看起来您的代理可能不支持 websockets,并且检测到这种情况会导致您看到的延迟。

标签: c# asp.net angular asp.net-core signalr


【解决方案1】:

嗯……

真丢脸。

代理导致了问题。

我在 Visual Studio 中为我自己的 IP 添加了绑定,现在可以使用了。

为此打开\APPLICATION_FOLDER\.vs\config\applicationhost.config

然后查找&lt;bindings&gt; 并添加您自己的。

例子:

<bindings>
  <binding protocol="http" bindingInformation="*:63251:localhost" />
  <binding protocol="https" bindingInformation="*:44333:localhost" />
  <binding protocol="http" bindingInformation="*:63251:192.168.178.11" />
  <binding protocol="https" bindingInformation="*:44333:192.168.178.11" />
</bindings>

保存它,你就完成了。

注意:

从现在开始,您必须以管理员身份启动 Visual Studio,否则您的应用程序将无法启动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 2019-10-07
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2019-12-16
    • 2018-12-10
    相关资源
    最近更新 更多