我正在尝试在ASP.NET 4.0 Web窗体中使用SignalR。
我遵循了一个教程,我能够使SignalR在default.aspx上工作,该文件位于我项目的根目录,无需登录即可访问。
现在,我想在登录后可访问的页面上使用它。
一个主页面,我有以下代码片段。
<head>
....
...
<script src="../Scripts/jquery-1.6.4.js"></script>
<script src="../Scripts/jquery.signalR-2.0.0.js"></script>
<script src="/signalr/hubs"></script>
<script type="text/javascript">
$(function () {
var logger = $.connection.myhub1;
logger.client.logMessage = function (msg) {
console.log(msg);
//$("#logUl").append("<li>" + msg + "</li>");
};
$.connection.hub.start({ pingInterval: 10000 }).done(function () {
alert('Hub starts');
}).fail(function (e) {
alert('There was an error');
console.error(e);
});
$.connection.hub.logging = true;
});
</script>
...
...
</head>
Hub类是MyHub1,它在根级别上
Imports Microsoft.AspNet.SignalR
Imports Microsoft.AspNet.SignalR.Hubs
<HubName("myhub1")>
Public Class MyHub1
Inherits Hub
Public Shared ReadOnly _Timer As System.Timers.Timer = New System.Timers.Timer()
Shared Sub New()
_Timer.Interval = 2000
AddHandler _Timer.Elapsed, AddressOf TimerElapsed
_Timer.Start()
End Sub
Private Shared Sub TimerElapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs)
Dim hub = GlobalHost.ConnectionManager.GetHubContext("myhub1")
hub.Clients.All.logMessage(String.Format("{0} - Still running", DateTime.UtcNow))
End Sub
Public Shared Sub LogMessage(ByVal str As String)
Dim hub = GlobalHost.ConnectionManager.GetHubContext("myhub1")
hub.Clients.All.logMessage(str)
End Sub
End Class
母版页正在应用到UserDefault.aspx,后者已应用母版并且具有上面给出的javascript代码。在default.aspx上,当用户登录后提供凭据时UserDefault.aspx向用户显示。
现在何时使用js文件创建开发工具signalR / hubs文件夹,但在控制台中出现错误
$。connection未定义。...
我在这里做什么错?
我需要移动MyHub1吗?
我设法通过移动脚本的引用来解决此问题。感谢这篇文章SignalR $.connection is undefined
[ jquery.js文件。我将引用移至脚本块,如下所示:
<Script>
...
...
<asp:ScriptReference Path="~/Scripts/jquery.signalR-2.0.0.js" />
<asp:ScriptReference Path="~/signalr/hubs" />
</Script>
上面的脚本块之后,也移动了一段客户代码。我进行此更改后,它开始工作。