我在现有 Web 应用程序中使用 SignalR 时遇到问题。我收到 javaruntime 异常“无法获取未定义或空引用的属性‘客户端’”,因为当我尝试从 $.connection 对象检索集线器时,它返回空值。
在发布我的代码之前,我想提供一些背景知识和一些我已经尝试过的东西: - 如果我在本地运行项目,一切正常。只有当我将项目部署到 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 错误:“无法获取未定义或空引用的属性‘客户端’”
有谁知道可能是什么原因造成的?谢谢你。
[编辑] - 在将工作的 signalr/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() ......
谢谢!
[修复] 我删除了目标 Web 应用程序的 Bin 文件夹,然后重新部署。仍然不确定有什么不同。所有的 .DLL 都是一样的。它现在可以工作了。奇怪的。