2012-04-01 103 views
1

我试着SignalR,我得到了javascript错误:状态是未定义的。该状态是我的枢纽,它被定义为:SignalR返回'HubName'未定义

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()); 
     } 

    } 
} 

当我尝试网址http://localhost:16476/signalr/hubs,我已经收到了javascript代码,但是有缺失的现状枢纽实例。

我已经引用了以下组件: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应用程序并将代码放在那里。有人可以导航 我想念我吗?

+0

您可以尝试将代码更改为? – aKzenT 2012-04-01 12:45:09

+0

我已经尝试过,但同样的错误。正如我在我的问题中写道,url http:// localhost:16476/signalr/hubs是可访问的,但缺少集线器实例。我认为,问题出在服务器端,因为它不会呈现集线器实例。 – zosim 2012-04-01 13:03:07

+0

其中activeTransport定义在哪里?你还通过nuget或手动添加了signalR吗? – drch 2012-04-01 13:17:06

回答

0

@drch:很好的问题。我忘了定义activeTransport。但这只是第二个问题。

由于来自aKzenT的观点,我解决了我的问题。我已将我的Web应用程序项目更改为网站项目。因为在Web应用程序中,没有添加App_Code文件夹的选项。

然后我有一些问题,当我从Visual Studio在动态端口上运行网站。在调试控制台中,它写道,没有找到jquery.js,找不到json2.js ...的所有js文件。当我将它部署到iis时,它开始工作。