Javascript 信号器-无法获取属性';客户';指未定义的或空的引用
我在现有Web应用程序中使用Signal时遇到问题。我收到javaruntime异常“无法获取未定义或null引用的属性'client',因为当我尝试从$.connection对象检索我的集线器时,它返回null 在我发布代码之前,我想提供一些背景资料和我已经尝试过的一些东西: -如果我在本地运行该项目,一切正常。只有当我将项目部署到IIS位置时,才会出现问题。 -我已验证集线器名称的大小写是否正确。同样,它在本地工作正常,只有在我将项目部署到IIS后才会抛出错误。 -我已经确认我所有的javascript都已成功加载。JQuery库只被引用一次,并且可以正常加载。信号器javascript和动态创建的信号器/集线器也是如此。 -如果我创建了一个新项目,并在现有的web应用程序下运行与web应用程序运行相同的代码,那么一切都可以正常工作(在新项目中使用相同的代码) 有人对问题所在有什么想法吗 集线器代码:Javascript 信号器-无法获取属性';客户';指未定义的或空的引用,javascript,jquery,.net,iis,signalr,Javascript,Jquery,.net,Iis,Signalr,我在现有Web应用程序中使用Signal时遇到问题。我收到javaruntime异常“无法获取未定义或null引用的属性'client',因为当我尝试从$.connection对象检索我的集线器时,它返回null 在我发布代码之前,我想提供一些背景资料和我已经尝试过的一些东西: -如果我在本地运行该项目,一切正常。只有当我将项目部署到IIS位置时,才会出现问题。 -我已验证集线器名称的大小写是否正确。同样,它在本地工作正常,只有在我将项目部署到IIS后才会抛出错误。 -我已经确认我所有的java
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>