在Windows Server 2012上部署后,SignalR无法正常工作

时间:2018-04-16 12:18:47

标签: asp.net vb.net webforms signalr iis-8.5

我在现场环境中遇到问题。当一个页面被加载时,信号r连接被创建,但是其他连接的连接不可用于新的连接,并且对于旧的connectionId,这个新创建的连接不可用。为了更好地理解,请参阅下面的代码

我在chathub.vb中的方法,从服务器端调用

Public Sub getGonnected()

    Clients.Client(Context.ConnectionId).hello("Connection is connected CONNECTIONID = " + Context.ConnectionId)

    Dim heartBeat = GlobalHost.DependencyResolver.Resolve(Of ITransportHeartbeat)()
    Dim connectionAlive = heartBeat.GetConnections().Where(Function(c) c.ConnectionId <> Context.ConnectionId).ToList()
    Clients.Client(Context.ConnectionId).hello("Other Connections Available ..............................................................")
    For Each item In connectionAlive
        Clients.Client(Context.ConnectionId).hello(".................................................................. " + item.ConnectionId)
    Next
    Clients.Client(Context.ConnectionId).hello("End of other connections available ........................................................")
    Clients.All.hello("Total Number of users available ..................................................................")
    Clients.All.hello("........................................................................... " + connectionAlive.Count().ToString())
    Clients.All.hello("End total Number of users available ...............................................................")
End Sub

在我的客户方面

   chat.client.hello = function(ping)
        {
            console.log(ping);
        }
 $.connection.hub.start().done(function () {
   });
   setInterval(function () {

                chat.server.getGonnected().done(function (result) {
                    console.log('connectionRequestsent')
                });

        }, 5000);

同样在我的web.config中,我添加了以下设置

目标框架4.5

如上面的示例代码

当一些新的用户寄存器发出信号时,我无法在borwsers控制台中看到新的连接。此外,新用户无法在浏览器控制台中看到信号器中已存在的用户的ConnectionId。

这件事只发生在服务器上。帮助会很有意义。我已经启用了websockets,我的websockets握手成功了。此外,spefic conntectionId能够向服务器发送消息和从服务器接收消息。但是不能与其他connectionId一起使用。

有时候用简单的话说

 Dim connectionAlive = heartBeat.GetConnections().Where(Function(c) 
 c.ConnectionId <> Context.ConnectionId).ToList()

长度为0,因为应用中已有其他连接。我不知道为什么会这样。

非常感谢任何帮助或指导。

SignalR版本为2.1.0

此致

阿都

3 个答案:

答案 0 :(得分:0)

我认为这与WIndows Server 2012没有任何关系。您必须自己在字典,数据库或其他适合您情况的地方实现此功能。

使用OnConnect事件,您可以向每个当前连接的客户端广播某人已加入的更新或某人已离开的OnDisconnect。如果您希望它是当前连接用户的列表,您将查询您的字典/数据库/其他...并广播。

SignalR Documentation有一些例子。

答案 1 :(得分:0)

从开发者处以https://github.com/aspnet/SignalR-samples下载工作中的信号器项目 下载后,在目录中选择要通过Visual Studio运行的任何示例。 我选择运行ChatSample并按照屏幕上的说明进行操作 之后,浏览文档以通读每个文件的工作方式 https://docs.microsoft.com/en-us/aspnet/core/signalr/

答案 2 :(得分:0)

请安装.Net Framework的最新版本,以解决此问题,我安装了4.8,并且所有广播消息均已发送。