SignalR因超过2个连接而失败

时间:2015-08-22 06:55:26

标签: websocket asp.net-mvc-5 signalr

我在SignalR中编写了一个相当简单的聊天应用程序。

如果我连接超过2个标签/浏览器/设备,第三个将挂起并且永远不会连接并最终导致问题。

为什么我只能与2位用户联系?

第一个请求在我断开其中一个2之后立即通过。

如果我使用相同的用户或不同的用户,则无关紧要。

我在Windows 10上使用IIS,使用SignalR 2.2的Asp.Net MVC5

它从不调用集线器代码,如果我在该选项卡打开时尝试连接第四个客户端,则第四个选项卡甚至不会返回视图。 This is the client side logging.

$.connection.hub.start().done(function () {
    //add all existing messages when we start the connection
    //chat.server.addExistingMessages();
    console.log('Now connected, connection ID=' + $.connection.hub.id);

第三次连接永远不会触发console.log。

$.connection.hub.start()

被点击,连接和集线器的值不为空。

  public override Task OnConnected()
    {

除非我终止其他两个中的一个,否则永远不会在第三个连接上被击中。因此,分享这些方法/函数的内部结构只会增加我的困惑。

$.connection.hub.starting(function () {
    console.log('starting')
});
$.connection.hub.received(function () {
    console.log('connection received')
});

在第三个客户端上,启动他在控制台中的放置,但收到的不是。

1 个答案:

答案 0 :(得分:1)

我相信在经历了很多头发拉扯和挫折之后,我能够找到答案。

因为桌面IIS只允许10个并发连接,并且websocket连接是如此动态,我认为它只作为10个连接,只有2个实际连接。 http://www.asp.net/signalr/overview/getting-started/supported-platforms

  

“不应使用完整版本的IIS或Cassini,因为会有   是10个同时连接的限制,这将是   因为连接是短暂的,所以很快就达到了   重新建立,不再立即处置   用过的。 IIS Express应该在客户端操作系统上使用。“

如果不是这样,那么有人请指正!

作为一项解决方案我将使用IIS Express,我不想要的原因是因为我希望我的网站暴露,所以我的同事可以连接和健全测试。我想出了如何将IIS暴露给Web并从命令提示符运行它,以便我可以在服务器启动时进行开发。 This is how to expose IIS Express 去 C:\用户[YOURNAME] \文件\ IISExpress \配置\对ApplicationHost.config

添加(适当替换IP地址和端口):

<binding protocol="http" bindingInformation="*:58938:192.168.1.42" />

到相关网站。

Running IIS from command line

  

打开命令提示符。

     

您无需管理员用户权限即可运行此命令   演练。但是,如果您具有管理员用户权限   想要在编号为1024或更小的端口上运行IIS Express。跑过   以下命令导航到IIS Express安装文件夹:

cd \Program Files\IIS Express 
  

或者如果您使用的是64位操作系统,请运行   以下命令:cd \ Program Files(x86)\ IIS Express运行   以下命令查看IIS Express用法字符串:

iisexpress /site:site-name

当然不要忘记端口转发和防火墙传递。