Javascript 信号器-无法获取属性';客户';指未定义的或空的引用

Javascript 信号器-无法获取属性';客户';指未定义的或空的引用,javascript,jquery,.net,iis,signalr,Javascript,Jquery,.net,Iis,Signalr,我在现有Web应用程序中使用Signal时遇到问题。我收到javaruntime异常“无法获取未定义或null引用的属性'client',因为当我尝试从$.connection对象检索我的集线器时,它返回null 在我发布代码之前,我想提供一些背景资料和我已经尝试过的一些东西: -如果我在本地运行该项目,一切正常。只有当我将项目部署到IIS位置时,才会出现问题。 -我已验证集线器名称的大小写是否正确。同样,它在本地工作正常,只有在我将项目部署到IIS后才会抛出错误。 -我已经确认我所有的java

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

在我发布代码之前,我想提供一些背景资料和我已经尝试过的一些东西: -如果我在本地运行该项目,一切正常。只有当我将项目部署到IIS位置时,才会出现问题。 -我已验证集线器名称的大小写是否正确。同样,它在本地工作正常,只有在我将项目部署到IIS后才会抛出错误。 -我已经确认我所有的javascript都已成功加载。JQuery库只被引用一次,并且可以正常加载。信号器javascript和动态创建的信号器/集线器也是如此。 -如果我创建了一个新项目,并在现有的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
网页代码:

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

有人知道这可能是什么原因吗? 多谢各位

[编辑]-将工作信号器/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)));
         }
    };
关于为什么signar/hubs.js文件中不包含此内容,您有什么想法吗?我正在调用Global.asax中的MapHubs()

谢谢

[FIX]
我删除了目标web应用程序的Bin文件夹,并重新部署了它。还是不知道有什么不同。所有的.dll都是相同的。但现在它可以工作了。奇怪。

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

为了解决这个问题,我必须将虚拟目录名(“TestingChat”)添加到jquery和Signal的脚本标记路径中

例如,由此:

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



这很难,您可以详细说明在IIS上运行的设置与不运行的设置之间的对比。您说过,“作为一个在现有web应用程序下作为web应用程序运行的新web应用程序,一切正常”。这与Signal失败的IIS上的设置有何不同?当然,我可以试试。。。在IIS中,我有一个名为“MyWebApplication”的Web应用程序。它是一个庞大而复杂的Web应用程序,已经存在了一段时间。我通过转到进入我的测试页面。由于某些原因,此项目中未创建我的集线器代理。如果我创建了一个新的VisualStudio项目,并将其称为mytest2,它只包含信号器代码(hub和客户端页面),那么我会将该项目作为应用程序部署到IIS中的主应用程序下(现在我转到)。现在,我的集线器代理生成了一个文件,也许“MyWebApplication”具有一些安全设置,这些设置锁定了Signar正常工作所需的一些ASP.NET库。您是否有任何应用程序日志记录,如Elmah或Enterprise Library?您是否检查了Windows应用程序事件日志以防万一?错误是javascript错误。然而,SignalR创建的集线器代理在我的情况下似乎不起作用。我只是希望我能知道更多的原因。据我所知,创建代理的是Global.asax中的RouteTable.Routes.MapHubs(),它运行时没有错误。除了尝试在javascript中获取信号集线器代理外,如何检查是否创建了信号集线器代理?是否值得在远程web服务器的请求上运行Fiddler,以查看是否存在任何脚本加载错误。这可能有助于缩小搜索范围。我的问题也是-为了有资格在localhost上运行project,我必须将引用更改为localhost/myprojectname/signalr/hubs“>@SSED-+1-对我来说也是一样,但我发现简单地做到这一点更容易:
proxies.testHub= this.createHubProxy('testHub'); 
    proxies.testHub.client = { };
    proxies.testHub.server = {
        connect: function () {
            return proxies.transactionHub.invoke.apply(proxies.testHub, $.merge(["Connect"], $.makeArray(arguments)));
         }
    };
<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>