SignalR无法设置未定义的属性''

时间:2013-06-02 10:24:50

标签: c# asp.net-mvc-4 signalr signalr-hub

我正在尝试在我的MVC4应用中设置SignalR。

问题是 - 即使我浏览到路径/信号器/集线器时我确实看到了代码(并且fiddler为/ signalr / hubs显示了200OK),它似乎也没有包含对我的集线器和客户端代码的任何引用没有看到集线器和方法。

我在开始调试时遇到这些错误(IIS Express,VS Express 2012):

Object has no method sending cannot set property 'messageAll' of undefined

Global.asax中的Application_Start包含:

        //RouteTable.Routes.MapHubs("/signalr", new HubConfiguration());
        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);

(我假设这会生成/ signalr / hubs,这似乎有效,但没有任何链接到我的实际集线器。可以看出我尝试了两种选择。)

在我的项目中,我在MessageHub.cs的根目录中找到了“Hubs”文件夹:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace Prj.Hubs 
{
[HubName("messagehub")]
public class MessageHub : Hub
{
    public void MessageAll(string message)
    {
        Clients.All.writeMessage(message);
    }

    public void MessageOthers(string message)
    {
        Clients.Others.writeMessage(message);
    }

    public void MessageSingle(string message)
    {

    }
}

}

在我的_Layout.cshtml中,我在结束标记之前:

<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery.signalR-1.1.2.js"></script>
    <script src="/signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            // create proxy on the fly
            var proxy = $.connection.messagehub; // this connects to our 'messageHub' Hub as above

            // for SignalR to call the client side function we need to declare it with the Hub
            proxy.messageAll = function (message) {
                $('#messages').append('<li>' + message + ''); // when the Hub calls this function it appends a new li item with the text 
            };

            // declare function to be called when button is clicked 
            $("#broadcast").click(function () {
                // calls method on Hub and pass through text from textbox 
                proxy.messageAll($("#message").val());
            });

            // Start the connection 
            $.connection.hub.start();
        });
    </script>

(旁注 - SignalR并不喜欢所有@ Scripts.Render(“〜/ bundles / jquery”),但直接的jquery脚本包括似乎有效。)

那为什么不识别“messagehub”呢?

1 个答案:

答案 0 :(得分:1)

我解决了这个问题 - 我的解决方案包含多个项目,虽然我已经卸载了SignalR,但在bin / Debug文件夹中的某些项目中仍然存在我几个月前尝试过的旧版SignalR版本的痕迹。

在运行时,SignalR试图将一些旧的dll与新的引用连接起来。所以,如果你有这个错误,那么

  • 卸载SignalR
  • 在整个解决方案文件夹中搜索“SignalR”并删除所有内容
  • 从Nuget Package Manager重新安装SignalR。