我在IE9上测试了一个简单的SignalR MVC 4应用程序。该应用使用群组通知:
public class Booking
{
public void BookFlight(String from, String to, string ConnectionId)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();
hubContext.Clients.All.addMessage("Started ... " + DateTime.Now.ToString());
string groupName = "Z"; // "g" + ConnectionId;
HttpContext.Current.Session["StartTime"] = DateTime.Now;
// Book first leg
hubContext.Clients.Group(groupName).addMessage(String.Format("Booking flight: {0}-{1} ...", from, to));
Thread.Sleep(2000);
// Book return
hubContext.Clients.Group(groupName).addMessage(String.Format("Booking flight: {0}-{1} ...", to, from));
Thread.Sleep(3000);
// Book car rent
hubContext.Clients.Group(groupName).addMessage(String.Format("Booking car rent: {0}-{1} ...", to, from));
Thread.Sleep(2000);
// Some return value
hubContext.Clients.All.addMessage("Finished ... " + DateTime.Now.ToString());
//hubContext.Clients.Group(groupName).addMessage("Flight booked successfully. Total Time = " + (DateTime.Now - (DateTime)HttpContext.Current.Session["StartTime"]).ToString());
}
}
namespace SignalrProgressDemo.Common
{
public class ProgressHub : Hub
{
public override Task OnConnected()
{
string groupName = "Z";
return Groups.Add(Context.ConnectionId, groupName);
}
...
以下是客户端代码:
$(function () {
$("#bookButton").click(function () {
$.ajax("/Home/BookFlight?from=tlv&to=fco&connectionId=" + $.connection.hub.id);
});
var progressHub = $.connection.progressHub;
$.connection.hub.logging = true;
progressHub.client.addMessage = function (message) {
$("#msg").html(message);
};
$.connection.hub.start(); //IE9 does NOT work
//$.connection.hub.start({ transport: 'longPolling' }); //IE9 works OK
});
如客户端代码所示,IE9仅显示发送给All的消息,不显示发送到“Z”组的消息。
只有当connection.hub以{transport:'longPolling'}开头时才能正常工作(=接收组消息)。
问题/问题
强制longpolling阻止在Chrome中使用WebSockets,Opera。
目前还不清楚为什么明确强制longpolling有帮助,因为IE9无论如何都会使用longpolling(因为它是实际工作的唯一方法)。
我确实注意到这种情况表明服务器中的longpolling和WebSockets之间可能存在关联:
一个。使用$ .connection.hub.start()
湾打开IE9。
℃。测试 - 工作正常
d。打开Chrome(将使用WebSockets) - 测试 - 工作正常
即测试IE9 - 不起作用。