尽管客户端绑定正确,OnConnected在部署时仍未触发

时间:2014-09-05 16:52:35

标签: iis-6 signalr

我搜索了网站,遇到了SignalR OnConnected and OnDisconnected not firing和类似网站,但解决方案并不适用于我的情况。我已经注册了客户端方法。

此外,在我的本地盒子上运行时,我的集线器的OnConnected方法会触发。它只是在部署时触发。但是,所有其他方法都可以正常工作就目前而言,我已经创建了一个解决方法:

<script>
    $(function () {
        var myHub = $.connection.myHub;
        myHub.client.clientMessage = function (message) { alert(message); };

        // Start the connection.
        $.connection.hub.start().done(function () {
            myHub.server.superfluousMethodToDoSameThingInOnConnect();
        });
    });
</script>

但是,我真的想停止使用第二次调用,只需让OnConnected正常工作即可。我的部署服务器上有什么必要使它工作相同?

作为参考,我的SignalR是版本1.2.2(目前仅限于.NET 4.0),并入MVC站点(否则没有错误)。 我的开发盒是IIS Express 8.5中的Windows 7托管 部署框是在IIS V6.0中托管的Winows Server 2003。

编辑1:我已加入

myHub.connection.stateChanged(function (change) { alert("State: " + change.newState); });

用于调试,当页面加载时,它会弹出“状态:0”,然后在短时间内弹出“状态:1”,当我离开页面时显示“状态:4”,所以看起来我的连接本身表现正常。它在本地和部署服务器上的功能相同。

编辑2:为了进一步测试,我更新了集线器中的方法,如下所示:

public override Task OnConnected()
{
    Groups.Add(Context.ConnectionId, Context.User.Identity.Name);
    Clients.All.clientMessage("OnConnected:: ID: " + Context.ConnectionId + " USER: " + Context.User.Identity.Name);
    return base.OnConnected();
}

public void SuperfluousMethodToDoSameThingInOnConnect()
{
    Clients.All.clientMessage("SuperfluousMethodToDoSameThingInOnConnect:: ID: " + Context.ConnectionId + " USER: " + Context.User.Identity.Name);
}

此测试的结果显示只有SuperfluousMethodToDoSameThingInOnConnect发送的文本会显示回来电。但是,其他客户端(在其他浏览器窗口中测试)会同时看到OnConnectedSuperfluousMethodToDoSameThingInOnConnect中的文字。

此外,当我尝试使用Context.Groups(Context.User.Identity.Name)将消息发送回呼叫者时,则不会发送消息。但是,如果我将群组注册行Groups.Add(Context.ConnectionId, Context.User.Identity.Name)OnConnected移至SuperfluousMethodToDoSameThingInOnConnect,则可以使用Groups.Add(Context.ConnectionId, Context.User.Identity.Name)发送 消息。这看起来非常奇怪,因为我可以看到OnConnected方法被调用,但该组未真正注册?

真的无所畏惧地解释这种不稳定的行为。

编辑3 :将网络应用推送到Windows Server 2012虚拟机,我发现它可以正常工作,与我的本地开发框相同。是不是SignalR在IIS 6上不能完全工作?

1 个答案:

答案 0 :(得分:2)

根据http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/supported-platforms中的“支持的服务器IIS版本”,仅支持IIS7或更高版本。