.NET Core 2.1 / Angular - SignalR 只需 2 分钟即可连接到集线器

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

http://img4.mukewang.com/60f2857b00017cbb07630154.jpg

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

http://img.mukewang.com/60f285850001d33706010099.jpg

这是我的 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,因此我使用了代理。我不知道这是否与它有关,但我只是想指出它以防万一。


倚天杖
浏览 238回答 1
1回答

白衣非少年

出色地...为我感到羞耻。代理导致了问题。我在 Visual Studio 中为我自己的 IP 添加了绑定,现在可以使用了。要做到这一点打开\APPLICATION_FOLDER\.vs\config\applicationhost.config.然后查找<bindings>并添加您自己的。例子:<bindings>&nbsp; <binding protocol="http" bindingInformation="*:63251:localhost" />&nbsp; <binding protocol="https" bindingInformation="*:44333:localhost" />&nbsp; <binding protocol="http" bindingInformation="*:63251:192.168.178.11" />&nbsp; <binding protocol="https" bindingInformation="*:44333:192.168.178.11" /></bindings>保存它,你就完成了。笔记:从现在开始,您必须以管理员身份启动 Visual Studio,否则您的应用程序将无法启动。
打开App,查看更多内容
随时随地看视频慕课网APP