2012-09-25 34 views
2

我正在使用SignalR向客户端发送实时更新消息。发送消息在Chrome中正常工作,在Firefox和IE中失败

接收邮件在Chrome,Firefox和IE中正常工作。这意味着,我可以从我的服务器发送一些来自我的Hub的内容,并且它没有问题地到达客户端

public void Receive(string whatever) 
{ 
    // This correctly invokes a function on the clients end. 
    Client.sayHello("Test");  
} 

发送从客户机到服务器的消息不会在Firefox和IE浏览器,但能正常工作在谷歌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 

在谷歌Chrome中,POST是永远不会被调用,也许这就是为什么它在那里工作。我所看到的是negotiateconnect的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

什么是您的点击处理程序的JavaScript代码? –

+0

@TimBJames:请参阅编辑。 – sergserg

回答

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

今天我有同样的问题。我的问题原来是我通过一个jQuery点击事件的更新(数据库更改)枢纽,然后设置点击事件恢复它的默认操作(它改变了当前页面)。在一位同事的一些好建议后,我将这些事件移到了接收页面上的document.ready中,并修复了我所看到的问题。 Chrome浏览器必须等待这些请求才能完成,而如果Firefox和IE需要很长时间才会杀死它们。

相关问题