2

所以,我们正在用 signalR 实现一些消息传递系统。我们通过最新版本的 Nuget 包含了 signalR。该应用程序托管在 IIS 7 上。我们已禁用所有 URL 重写规则。

我们正在使用集线器,请参见以下代码:


    [HubName("messages")]
    public class Messages : Hub
    {
        public void Send(string message)
        {
            Clients.showPopUp(message);
        }
    }

视图中的包含文件:

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>       
<script src="@Url.Content("~/Scripts/jquery.signalR.js")" type="text/javascript"></script>
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/Messages/Messages.js")" type="text/javascript"></script>

Messages.js 的内容:

$(function () {
    var messages = $.connection.messages;

    messages.showPopUp = function (message) {
        console.log("test");
    };

    $.connection.hub.start(function () {
        console.log('connected');
    });
});

提交消息时调用:

$.connection.messages.send($('#Body').val());

所以我们得到了:Google Chrome 控制台中没有错误,没有 xhr 请求什么信号。

我们检查了/signalr/hubs它是否存在,它还/signalr/negotiate返回以下 json:

{"Url":"/agenda/signalr","ConnectionId":"a4215b26-32f1-4a52-bf6d-4de096298a07","TryWebSockets":false,"WebSocketServerUrl":null,"ProtocolVersion":"1.0"}

当我们调用 send 时,我们在控制台中得到以下信息:

未捕获的 SignalR:必须先启动连接,然后才能发送数据。在 .send() 之前调用 .start()

如果我们调试 signalR,我们会看到 start 被调用,但我们没有遇到 jQuery ajax 调用的错误或成功,也没有任何 xhtml 请求。我们做错了什么?

没有网络请求

4

2 回答 2

2

尝试检查这个问题:https ://github.com/SignalR/SignalR/issues/328

于 2012-04-26T16:18:28.283 回答
1

解决方案

在 jquery.signalR.js 中更改所有

$.ajax(url, {options});

$.ajax({ url: url, other options...});
于 2012-04-27T06:15:01.430 回答