我正在使用SignalR向我的客户发送实时更新消息。
接收消息在Chrome,Firefox和IE中运行良好。这意味着,我可以从我的服务器向我的服务器发送一些东西,它可以毫无问题地到达客户端。
public void Receive(string whatever)
{
// This correctly invokes a function on the clients end.
Client.sayHello("Test");
}
从客户端向服务器发送消息在Firefox和IE中都不起作用,但在Google Chrome 21上运行正常。
在Firefox上,使用Firebug的控制台,这些是加载页面后立即触发的事件序列:
GET http://localhost:12962/signalr/signalr/negotiate?_=1348547579430 200 OK 12ms
POST http://localhost:12962/signalr/signalr/send?transport=serverSentEvents&connectionId=b6fdd67f-6a71-4e5f-80cf-9e2b90cc7fe3 200 OK
在谷歌浏览器上,永远不会调用该POST,也许这就是它在那里工作的原因。我看到的只是negotiate
和connect
的POST。这是我在遵循教程之后所期望的,以及SignalR came out之后的所有内容!
在Firefox上,每次单击应向服务器发送消息的按钮时,都会在控制台中记录:
$(document).ready(function() {
var chat = $.connection.chat;
/* Actions when someone clicks the Bid button. */
$(".pujar").click(function () {
chat.receive($(this).siblings('.auction-id').text());
$(this).parent().siblings('.seconds').text('15');
});
chat.updateAuction = function (message) {
var result = $.parseJSON(message);
var divId = "#" + result.AuctionId;
$(divId + " .seconds").text("15");
$(divId + " .stat .amount").html("$" + result.LanceCost);
$(divId + " .stat .latestbidder").html(result.LatestBidder);
$(divId + " .stat").fadeOut().fadeIn();
};
$.connection.hub.start();
});
POST http://localhost:12962/signalr/signalr/send?transport=serverSentEvents&connectionId=b6fdd67f-6a71-4e5f-80cf-9e2b90cc7fe3 200 OK 16ms
Params
connectionId b6fdd67f-6a71-4e5f-80cf-9e2b90cc7fe3
transport serverSentEvents
Post
data {"hub":"chat","method":"Receive","args":["1"],"state":{},"id":1}
Response
{"State":{},"Result":null,"Id":"1","Error":null,"StackTrace":null}
任何想法是什么导致了这个非常奇怪的问题?
答案 0 :(得分:1)
您可以在连接开始之前触发“发送”到服务器。
试试这个:
$(document).ready(function() {
var chat = $.connection.chat;
chat.updateAuction = function (message) {
var result = $.parseJSON(message);
var divId = "#" + result.AuctionId;
$(divId + " .seconds").text("15");
$(divId + " .stat .amount").html("$" + result.LanceCost);
$(divId + " .stat .latestbidder").html(result.LatestBidder);
$(divId + " .stat").fadeOut().fadeIn();
};
$.connection.hub.start().done(function() {
/* Wire up click event after the connection has been started */
$(".pujar").click(function () {
chat.receive($(this).siblings('.auction-id').text());
$(this).parent().siblings('.seconds').text('15');
});
});
});
请注意,对于您的服务器端代码,您没有在客户端上提供“sayHello”功能,所以我假设您没有在您的代码段中包含该功能。客户也应该是客户。
答案 1 :(得分:1)
我今天遇到了同样的问题。我的问题原来是我正在向集线器传递jquery点击事件的更新(数据库更改),然后设置click事件以恢复它的默认操作(它改变了当前页面)。在得到同事的一些好建议之后,我将这些事件移到了接收页面上的文档上,并修复了我看到的问题。 Chrome必须等待这些请求完成,而Firefox和IE会因为耗时太长而杀死它们。