我正在寻找快速而肮脏的答案。我只是在消隐,现在盯着屏幕看了12个多小时后,我觉得我被枪杀了。
我想做一个简单的SignalR应用程序作为教程。我找到了这个example,但我一直收到错误,即票证未定义。我找到了更多,并继续得到同样的错误。我将样本项目与我的项目进行了比较,但我找不到任何不足之处。
似乎$.connection.ticketHub
或$.connection.chat
正在返回未定义的对象。我需要对/signalr/hubs
做些什么特别的事吗?非常感谢任何其他想法。
答案 0 :(得分:14)
您需要将/ signalr / hub添加到页面,它是由SignalR动态生成的javascript,包含集线器的方法存根和集线器上的方法。
因此,如果您有一个名为TestHub
的.NET中心,并且使用名为SendMessage(string message)
的方法,则会生成javascript,以便您可以通过JavaScript调用:$.connection.testHub.sendMessage("some message to server");
将您的浏览器指向url:/ signalr / hubs,您应该获得一个javascript。
大约150行你会看到ticketHub存根:
$.extend(signalR, {
ticketHub: {
_: {
hubName: 'YourNameSpace.TicketHub',
ignoreMembers: ['someMethod', 'namespace', 'ignoreMembers', 'callbacks'],
connection: function () { return signalR.hub; }
},
您可以使用Mozilla Firebug插件或Chrome开发者工具(wrench-icon->工具 - >开发人员工具)查看发送到服务器的内容以及从服务器返回的内容。
编辑:SignalR阻止/信号器/集线器中有一个错误被正确生成(它没有生成方法存根)。 https://github.com/SignalR/SignalR/issues/134EDIT2:您的脚本标记可能不正确,请尝试:
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
或者您没有引用SignalR.AspNet.dll
程序集。如果我没记错的话,就是那个将路由连接到/ signalr的程序集。
答案 1 :(得分:3)
您使用的是IE8吗?
如果是,请确保在signalR脚本上面包含一个Json2脚本:
<script src="../../Scripts/json2.min.js" type="text/javascript"></script>
(从Nuget获取Json2)
答案 2 :(得分:3)
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
答案 3 :(得分:2)
将脚本标记更改为:
<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>
答案 4 :(得分:2)
使用Visual Studio 2010 / MVC 3 / Firefox浏览器,我的Index.cshtml正好使用SignalR以及
<script src="@Url.Content("~/Scripts/jquery-1.8.0.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR-0.5.2.min.js")" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
我还有另外一个问题,但我没有将@ Url.Content添加到信号器/集线器 为了简化测试,我还将我的类文件放在Controllers文件夹的根目录中。 我还有来自Nuget的以下内容
SignalR / SignalR.Js / SignalR.Server / SignalR.Hosting.AspNet / SignalR.Hosting.Common
(并不是说你需要所有这些依赖关系,但这就是我所拥有的)
希望有人帮助......