20

我在 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. 还尝试做默认的聊天示例,它给出了同样的错误。SignalR 在 VS2012 中使用时是否不受支持,还是我只是愚蠢?

4

9 回答 9

26

尝试BundleConfig.RegisterBundles(BundleTable.Bundles);Global.asax.cs中删除,看看是否有帮助?

于 2012-07-04T19:53:55.270 回答
9

试着[HubName("tenantHub")]离开你的课。如果我那里有那些,我的就行不通了。还可以尝试将集线器放入"Hubs"项目根目录下的文件夹中。

于 2012-07-05T13:28:36.430 回答
5

这通常是由于两次加载 jQuery 造成的。通常我们习惯于在页脚中加载 jQuery。由于信号器抱怨并强制您在 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>

希望这可以帮助。:)

于 2013-04-03T22:20:25.220 回答
3

我在 VS2012 RTM 中遇到了同样的问题。

问题是我首先在 BundleConfig.cs 中添加了信号器,并希望它能够正常工作。但随后在浏览器中使用“查看源代码”时,我注意到 signalr.js 包含在 jquery.js 之前。signalr.js 包含在页面顶部,jquery 包含在页面底部。

在对 BundleConfig 进行了一番摆弄之后,在 jquery.js 之后包含了 signalr.js,现在 signalr 就像一个魅力一样工作!

于 2012-08-26T19:33:16.467 回答
2

尝试把RouteTable.Routes.MapHubs();作为第一个项目Application_Start()放在Global.asax.cs

我在这里有一个示例代码/项目

于 2013-03-26T09:53:49.050 回答
1

如果这些都不适合您,请确保在最终的 html 源代码中,不仅对 SignalR 脚本的引用出现在 jQuery 之后,而且版本与您在脚本文件夹中的实际文件匹配。

<script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 

例如这个匹配 2.0.2 版本的 SignalR,如果你通过包升级 SignalR,那么你必须手动编辑这一行。

于 2014-04-07T07:42:25.320 回答
0

我有一个类似的问题,我的工作是从 Visual Studio 2010 调试但不是在本地主机(IIS7.5 Windows 7)上工作。我发现我在“signalr/hubs”的定义中有一个额外的斜线,我使用的是“/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">

为了找到这个问题,我按如下方式打开了日志记录,并在开发工具的控制台中查看了在 localhost 上部署时出现的错误。

// Logs errors to the browser dev 'f12' console
$.connection.hub.logging = true;

希望这对其他人有帮助。我现在在多台 PC 上玩 chrome、IE9、10 - 多么棒的库!

于 2013-07-05T05:18:47.693 回答
0

确保您没有重复的中心名称;[HubName("tenantHub")] - 即两个或多个使用相同名称装饰的集线器类。

于 2013-09-10T11:17:53.603 回答
0

与约翰相反,

我必须在信号器/集线器声明中添加 /

IE。

<script src="signalr/hubs" type="text/javascript"></script>

成为

<script src="/signalr/hubs" type="text/javascript"></script>
于 2016-09-04T21:08:21.797 回答