我在MVC4应用程序中使用Visual Studio 2012 Ultimate RC,SignalR 0.5.1和Jquery 1.7.2。
我看过:MVC4 SignalR "signalr/hubs" 501 Not Implemented Error
但它不会影响我的问题(我使用IIS Express进行调试)。
当我尝试使用SignalR时,$ .connection变量未定义。我的服务器端代码:
[HubName("tenantHub")]
public class TenantHub : Hub
{
...
void TenantChange(CrudAction action, Tenant tenant)
{
Clients.eventOccurred(action.ToString(), tenant);
}
}
客户方:
$(function() { var test = $.connection.tenantHub; });
正在引用客户端SignalR/hubs
,我可以看到JS代码,它不会抛出任何错误。但引用$ .connection会引发Uncaught TypeError: Cannot read property 'tenantHub' of undefined
。还试图做默认的聊天示例,它给出了同样的错误。在VS2012中使用时是不支持SignalR还是我只是愚蠢?
答案 0 :(得分:26)
尝试从 Global.asax.cs 中删除BundleConfig.RegisterBundles(BundleTable.Bundles);
,看看是否有帮助?
答案 1 :(得分:9)
尝试从课堂上取走[HubName("tenantHub")]
。如果那里有那些,我的工作就行不通。还可以尝试将您的集线器放入项目根目录中名为"Hubs"
的文件夹中。
答案 2 :(得分:5)
这通常是由于加载jQuery两次造成的。通常我们习惯于在页脚中加载jQuery。由于signalr抱怨并强迫您在signalr-x.js之前包含jQuery库。
你可以在signalr-x.js之前包含jQuery,你可以在你包含jQuery插件的页脚中做这样的事情,以避免加载它两次:
<script type="text/javascript">
!window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>');
!window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>');
</script>
希望这会有所帮助。 :)
答案 3 :(得分:3)
我在VS2012 RTM中遇到了同样的问题。
问题是我首先在BundleConfig.cs中添加了signalr并期望它能正常工作。 但是在浏览器中使用“查看源代码”后,我注意到在jquery.js之前包含了signalr.js。 signalr.js包含在页面顶部,jquery包含在页面底部。
在使用BundleConfig之后,在jquery.js之后包含了signalr.js,现在signalr就像魅力一样!
答案 4 :(得分:2)
尝试将RouteTable.Routes.MapHubs();
作为Application_Start()
中Global.asax.cs
的第一项{/ 1}}
答案 5 :(得分:1)
如果这些都不适合你,请确保在最终的html源代码中,不仅在jQuery之后出现对SignalR脚本的引用,而且版本与脚本文件夹中的实际文件相匹配。
<script src="~/Scripts/jquery.signalR-2.0.2.js"></script>
例如,这个与SignalR的2.0.2版本匹配,如果你通过包升级SignalR,那么你必须手动编辑这一行。
答案 6 :(得分:0)
我有一个类似的问题,我的工作形式是visual studio 2010调试但不在localhost(IIS7.5 windows 7)上。我发现在“信号器/集线器”的定义中我有一个额外的斜线,我使用的是“/ signalr / hubs”。我还为浏览器兼容性添加了JSON 2 js参考。请注意,声明.js的顺序非常重要。
<script src="Scripts/JSON2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
为了找到这个问题,我打开了如下记录,并在dev工具的控制台中查看了在localhost上部署时的错误。
// Logs errors to the browser dev 'f12' console
$.connection.hub.logging = true;
希望这有助于其他人。我现在在多台PC上玩Chrome,IE9,10 - 这是一个很棒的图书馆!
答案 7 :(得分:0)
确保您没有重复的中心名称; [HubName(“tenantHub”)] - 这是两个或多个用相同名称修饰的集线器类。
答案 8 :(得分:0)
与约翰相反,
我必须在信号器/集线器声明
中添加一个/即
<script src="signalr/hubs" type="text/javascript"></script>
成了
<script src="/signalr/hubs" type="text/javascript"></script>