所以,我们正在用 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 请求。我们做错了什么?