繁体   English   中英

SignalR - 无法获取未定义或空引用的属性“客户端”

[英]SignalR - Unable to get property 'client' of undefined or null reference

我在现有Web应用程序中使用SignalR时遇到问题。 我收到javaruntime异常“无法获取未定义或空引用的属性'客户端',因为当我尝试从$ .connection对象检索我的集线器时,它返回null。

在我发布代码之前,我想提供一些背景和一些我已经尝试过的东西: - 如果我在本地运行项目,一切正常。 只有当我将项目部署到IIS位置时才会出现问题。 - 我已经验证我的集线器名称是正确的驼峰套。 同样,它在本地工作正常,并且只有在我将项目部署到IIS后才会抛出错误。 - 我已经确认我的所有javascript都已成功加载。 JQuery库只引用一次,并且加载正常。 signalR javascript和动态创建的信号器/集线器也是如此。 - 如果我创建一个新项目,并运行与在现有Web应用程序下作为Web应用程序运行的新Web应用程序相同的代码,一切正常(正在使用相同的代码,仅在新项目中)。

任何人都对问题是什么有任何想法?

枢纽代码:

Imports Microsoft.AspNet.SignalR

Public Class TestHub
    Inherits Hub

    Public Sub Connect()
        Try
            Clients.Caller.onConnect(Context.ConnectionId)
        Catch ex As Exception
            LogMessage("ERROR Connecting to Hub", 0, 0, "ERROR")
        End Try
    End Sub

End Class

网页代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.6.4.min.js"></script>
    <!--Reference the SignalR library. -->
    <script src="Scripts/jquery.signalR-1.1.3.js"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script src="signalr/hubs"></script>
    <script type="text/javascript">
        $(function () {
            // Declare a proxy to reference the hub. 
            var thub = $.connection.testHub;

            registerClientMethods(thub);

            // Start Hub
            $.connection.hub.start().done(function () {
                registerEvents(thub);
                thub.server.connect();
                alert('connected!');
            });
        });


        function registerClientMethods(thub) {
            thub.client.onConnect = function (id) {
                $('#lblConnectionID').text(id);
            }
        }

        function registerEvents() {

        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblConnectionID" runat="server" />
    </div>
    </form>
</body>
</html>

Global.asax代码:

Imports System.Web.Routing
Imports Microsoft.AspNet.SignalR

Public Class Global_asax
  Inherits System.Web.HttpApplication
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the application is started
    Try
    ' Register the default hubs route: ~/signalr/hubs
    RouteTable.Routes.MapHubs()
    Catch ex As Exception
    LogMessage("ERROR initializing SignalR: " & ex.Message, 0, 0, "ERROR")
    End Try
End Sub
...

所以现在,当我转到我的页面SignalRTest.aspx时, thub.client.onConnected = ...行引发了一个javascript错误:“无法获取未定义或空引用的属性'客户'”

有谁知道可能导致这种情况的原因? 谢谢。

[编辑] - 将工作信号器/ hubs.js文件与非工作文件进行比较后,我发现以下部分缺失:

proxies.testHub= this.createHubProxy('testHub'); 
    proxies.testHub.client = { };
    proxies.testHub.server = {
        connect: function () {
            return proxies.transactionHub.invoke.apply(proxies.testHub, $.merge(["Connect"], $.makeArray(arguments)));
         }
    };

有关为什么这不会包含在signalr / hubs.js文件中的任何想法? 我在Global.asax中调用MapHubs()...

谢谢!

[FIX]我删除了目标Web应用程序的Bin文件夹,并重新部署。 仍然不确定有什么不同。 所有.DLL都是一样的。 它现在有效。 奇。

从VS 2012发布到IIS 7.5后尝试调试以运行Web应用程序时遇到此错误。 经过一些拔毛后,我意识到问题在于我在部署时没有更改jquery脚本和信号器路径。

要解决此问题,我必须将虚拟目录名称(“TestingChat”)添加到jquery和signalr的脚本标记的路径中。

例如:

<script src="Scripts/jquery-1.8.2.min.js" ></script>
<script src="/signalr/hubs"></script>

<script src="/TestingChat/Scripts/jquery-1.8.2.min.js" ></script>
<script src="TestingChat/signalr/hubs"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM