SignalR - 启动

时间:2012-01-19 03:16:35

标签: jquery asp.net-mvc-3 signalr

我正在寻找快速而肮脏的答案。我只是在消隐,现在盯着屏幕看了12个多小时后,我觉得我被枪杀了。

我想做一个简单的SignalR应用程序作为教程。我找到了这个example,但我一直收到错误,即票证未定义。我找到了更多,并继续得到同样的错误。我将样本项目与我的项目进行了比较,但我找不到任何不足之处。

似乎$.connection.ticketHub$.connection.chat正在返回未定义的对象。我需要对/signalr/hubs做些什么特别的事吗?非常感谢任何其他想法。

5 个答案:

答案 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/134

EDIT2:您的脚本标记可能不正确,请尝试:

<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)

李史密斯的回答是正确的。我从nuget获得了最新的json2,并确保你从signalR常见问题解答网站获得web.config的更改:

  <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

(并不是说你需要所有这些依赖关系,但这就是我所拥有的)

希望有人帮助......