无法使用信号R获取未定义或空引用的属性"chatHub"

K. *_* L. 3 .net signalr signalr-hub

我知道这个问题已被多次询问,但我尝试了所有解决方案,似乎没有一个适合我的问题.

我收到以下错误:

0x800a138f - JavaScript runtime error: Unable to get property 'chatHub' of undefined or null reference.
Run Code Online (Sandbox Code Playgroud)

错误是随机出现的,有时当我运行我的webapp时会发生,有时它不会,我能够运行我的应用程序并正常使用集线器.

索引页面中的脚本:

@section scripts
{
    <script src="Scripts/jquery.signalR-2.0.3.js" type="text/javascript"></script>
    <script src="signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
    $(function () {
        var chatHub = $.connection.chatHub;

        chatHub.client.add = function (message) {
            $('#listMessages').append('<li>' + message + '</li>');
        };

        $.connection.hub.start().done(function () {
            $('#SendMessage').click(function () {
                var message = $('#txtMessage').val();
                chatHub.server.send($('#who').val(), message);
                $('#listMessages').append('<li>' + 'You said : ' + message + '</li>');
            })
        });
    })
</script>
Run Code Online (Sandbox Code Playgroud)

}

布局是visual studio的Internet MVC应用程序的默认布局,其中包含:

@Scripts.Render("~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud)

我简单的中心:

[HubName("chatHub")]
public class ChatHub : Hub
{
    public void send(string sendTo, string message)
    {
        base.Clients.Group(sendTo).add(Context.User.Identity.Name + " said : " + message);
    }

    public override Task OnConnected()
    {
        base.Groups.Add(Context.ConnectionId,  Context.User.Identity.Name);
        return base.OnConnected();
    }
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我一直在随机获得错误.我该如何解决?谢谢!

编辑:按照DaveB的建议,我使用Fiddler进行检查,似乎它要求信号器/集线器不是来自/ signalr/hubs,而是来自/ mycontroller/signalr/hubs,这不是有效的地址(jquery的错误相同) -signalr js).我怎样才能解决这个问题 ?

Dav*_*veB 5

将脚本加载更改为<script src="/signalr/hubs"></script>(注意初始正斜杠),以便从根目录而不是相对于当前目录加载.