【问题标题】:SignalR - StartUpSignalR - 启动
【发布时间】:2017-01-06 20:00:31
【问题描述】:

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

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

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

【问题讨论】:

  • 你应该在页面中添加这个脚本代码。因为signalR需要运行脚本代码的定义。
  • 你的代码在哪里?如果我们能真正看到它,可能会更容易告诉你出了什么问题。
  • 我也有同样的问题,像这个问题一样解决了:stackoverflow.com/questions/8941595/…

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


【解决方案1】:

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

因此,如果您有一个名为 TestHub 的 .NET-hub,则会生成一个名为 SendMessage(string message) 的方法,因此您可以从 JavaScript 调用:$.connection.testHub.sendMessage("some message to server");

将您的浏览器指向网址:/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。

【讨论】:

  • 是的,你是对的,我从 /signalr/hubs 请求中得到了 404。你指出我的问题显示了修复,但下载项目文件并构建它并没有解决问题。
  • 添加SignalR.AspNet.dll ... Could not load type 'SignalR.IJsonSerializer' from assembly 'SignalR, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
  • 您添加了SignalR.dll 程序集吗?这些是必需的程序集。
  • 是的,我有,NuGet 有 SignalR 的更新包吗?它只安装SignalR.dll 而不是SignalR.AspNet.dll,所以添加它会给我错误。还有其他我需要的 NuGet 没有安装吗?还是为SignalR.dll 安装了错误的dll?
  • 从 GitHub (github.com/SignalR/SignalR) 试用最新版本。如果您正在使用它,您可能必须在代码中将 ClientId 更改为 ConnectionId。
【解决方案2】:

你用的是 IE8 吗?

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

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

(从 Nuget 获取 Json2)

【讨论】:

    【解决方案3】:

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

     

    【讨论】:

      【解决方案4】:

      把你的脚本标签改成这样:

      <script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>
      

      【讨论】:

        【解决方案5】:

        使用 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
        

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-16
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 2014-03-31
          • 1970-01-01
          • 2012-03-06
          • 1970-01-01
          相关资源
          最近更新 更多