代码之家  ›  专栏  ›  技术社区  ›  GregH

.NET信号器错误:无法读取未定义的属性“client”

  •  2
  • GregH  · 技术社区  · 7 年前

    我目前正在尝试在中使用信号器。NET web应用程序。在审阅了许多帖子/文章后,我仍然感到困惑。在页面加载时,我收到一个错误:

    Uncaught TypeError: Cannot read property 'client' of undefined

    我目前的实施情况如下:

    捆绑配置。cs:

    //note jquery is rendered in a shared bundle in _layout.cshtml. I have
    //verified in Chrome debugger it is loaded before the bundles shown here
    bundles.Add(new ScriptBundle("~/bundles/signalr").Include(
                      "~/Scripts/jquery.signalR-2.2.3.js"));
    
    bundles.Add(new ScriptBundle("~/bundles/home")
            .Include("~/Scripts/Home/Index.js"));
    

    视图中呈现的束:

    @section scripts {
         @Scripts.Render("~/bundles/signalr")
         @Scripts.Render("~/bundles/home")
    }
    

    启动。cs:

    public void Configuration(IAppBuilder app)
    {
      app.MapSignalR();
    }
    

    仪表板集线器。cs:

    namespace Sample.SignalR
    {
      [HubName("dashboardHub")]
      public class DashboardHub : Hub
      {
        public void sendMessage(string message)
        {
          Clients.All.receiveMessage(notes);
        }
      }
    }
    

    指数js公司:

    $(function () {
        var messageHub = $.connection.dashboardHub;
    
        //send message to hub so hub updates other clients
        $(document).on("submit", "#messageForm", function () {
            messageHub.server.sendMessage($("#Message").val());
        });
    
        //receive message
        messageHub.client.receiveMessage= function (message) {  
            $("#Message").empty();
            $("#Message").text(notes);
        }
    
        $.connection.hub.start();
    });
    

    在脚本的第行页面加载时引发错误:

    messageHub.client.receiveNotesUpdate = function (notes) {

    有些事情我已经检查过了,也反复检查过了:

    • 脚本按正确的顺序呈现在页面上
    • 客户端和服务器之间的集线器名称和方法名称匹配(已尝试使用 而且没有 [HubName("dashboardHub")] 注释)
    • 集线器类是公共的

    我不知道为什么 messageHub 此时未定义。如何解决此问题?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Luke Villanueva    7 年前

    我认为您没有添加自动生成的信号器中心脚本

    <script src="signalr/hubs"></script>
    

    就我而言,我的信号集线器位于webapi上。我包含了api所在的域:

    <script src="somedomainorinstance/signalr/hubs"></script>
    

    此外,在页面加载时,您可以添加此项以查看是否正在建立连接

    $.connection.hub.url = url + "/signalr/hubs";
    $.connection.hub.logging = true;
    $.connection.hub.start()
        .done(function () { console.log("Signal R connected"); })
        .fail(function () { console.log("Could not Connect to signal R hub!"); });
    
    //I added this to established the connection again in case of a disconnect
    $.connection.hub.disconnected(function () {
        setTimeout(function () {
            $.connection.hub.start();
        }, 5000); // Re-start connection after 5 seconds
    });
    
    //put the rest of your code here
    

    这就是我现在的设置方式。它工作得很好。

    我希望这有帮助!干杯