【发布时间】:2012-04-01 12:40:16
【问题描述】:
我正在尝试 SignalR,但出现 javascript 错误:状态未定义。状态是我的中心,它被定义为:
namespace SignalRDemo
{
public class Status : Hub, IDisconnect, IConnected
{
public Task Disconnect()
{
return Clients.leave(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Connect()
{
return Clients.joined(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Reconnect(IEnumerable<string> groups)
{
return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString());
}
}
}
当我尝试使用 url http://localhost:16476/signalr/hubs 时,我收到了 javascript 代码,但缺少 Status hub 实例。
我引用了以下程序集:SignalR.dll、Newtonsoft.Json.dll、WebActivator.dll、Microsoft.Web.Infrastructure.dll
我的 default.aspx 站点如下所示:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<script src="/Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="/Scripts/json2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.signalR.js" type="text/javascript"></script>
<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>
<script type="text/javascript">
$(function () {
var status = $.connection.status;
status.joined = function (id, when) {
if ($.connection.hub.id === id) {
addMessage(id, 'blue');
}
addMessage(id + ' joined at ' + when, 'green');
};
status.rejoined = function (id, when) {
addMessage(id + ' reconnected at ' + when, 'purple');
};
status.leave = function (id, when) {
addMessage(id + ' left at ' + when, 'red');
};
function addMessage(value, color) {
$('#messages').append('<li style="background-color:' + color + ';color:white">' + value + '</li>');
}
$.connection.hub.start({ transport: activeTransport });
});
</script>
</head>
<body>
<ul id="messages">
</ul>
</body>
</html>
此示例复制自官方 SignalR 示例。我创建了自己的 asp.net Web 应用程序并将代码放在那里。有人可以导航吗 请问我想念什么?
【问题讨论】:
-
您可以尝试将代码更改为 吗?
-
我试过了,但同样的错误。正如我在我的问题中所写的,url localhost:16476/signalr/hubs 是可以访问的,但是缺少集线器的实例。我认为,问题出在服务器端,因为它没有呈现集线器实例。
-
activeTransport 定义在哪里?你也是通过 nuget 还是手动添加 signalR 的?
-
您将集线器的 Status.cs 放在哪里?确保它在 App_Code 目录中。