13

我正在寻找快速而肮脏的答案。我只是在发呆,在盯着屏幕超过 12 个小时后,我想我被枪杀了。

我想做一个简单的 SignalR 应用程序作为教程。我找到了这个例子,但我不断收到票未定义的错误。我发现了更多,并不断收到相同的错误。我将示例项目与我的项目进行了比较,但找不到任何差异。

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

4

5 回答 5

14

您需要将 /signalr/hubs 添加到页面,它是由 SignalR 动态生成的 javascript,其中包含集线器的方法存根和集线器上的方法。

因此,如果您有一个名为 .NET-hub ,则会生成TestHub一个名为 javascript 的方法,以便您可以从 JavaScript 调用:SendMessage(string message)$.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 开发者工具(扳手图标->工具->开发者工具)来查看发送到服务器和从服务器返回的内容。

编辑:SignalR 中有一个错误阻止正确生成 /signalr/hubs (它没有生成方法存根)。https://github.com/SignalR/SignalR/issues/134

EDIT2:您可能有一个不正确的脚本标签,请尝试:

<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>

或者您没有引用SignalR.AspNet.dll程序集。如果我没记错的话,就是那个组件将路由连接到 /signalr。

于 2012-01-19T20:01:00.177 回答
3

Lee Smiths 的回答是正确的。我从 nuget 获得了最新的 json2,并确保您在 signalR 常见问题解答网站的 web.config 中进行了更改:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
于 2012-10-05T17:55:51.353 回答
3

你用的是IE8吗?

如果是,请确保在 signalR 脚本上方包含 Json2 脚本引用:

<script src="../../Scripts/json2.min.js" type="text/javascript"></script>

(从 Nuget 获取 Json2)

于 2012-01-23T11:42:44.573 回答
2

使用 Visual Studio 2010 / MVC 3 / Firefox Browser ,我的 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

(并不是说您需要所有这些依赖项,但这就​​是我所拥有的)

希望对某人有所帮助...

于 2012-08-15T09:15:24.620 回答
2

将您的脚本标签更改为此:

<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>
于 2012-06-14T04:57:43.457 回答