【发布时间】:2013-02-09 17:08:50
【问题描述】:
我正在使用 SignalR-1.0.0-rc2。 我正在使用跨域 SignalR,因为移动设备上的某些浏览器仍然只允许每个域有两个连接。所以我有一个 SignalR 域和一个网络域。服务器端,它们都是一样的。
我的实现适用于 Opera、Firefox、Chrome、Safari 和 IE10。它不适用于 IE9、IE8 和 IE7。
jQuery.support.cors = true;
var connection = $.connection.globalHub;
$.connection.hub.url = SignalRDomain;
$.connection.hub.logging = true;
$.connection.hub.qs = "UserID="+UserID+"&Login="+UserLogin+"&UserHash="+UserHash;
connection.client.MyLocalFunction = function () {
// do something
}
$.connection.hub.start();
我已开启日志记录。 IE9/8/7 控制台向我显示了两条 SignalR 跟踪消息: [13:54:37 UTC+0100] SignalR:自动检测到的跨域 URL。 [13:54:37 UTC+0100] SignalR:正在与“http://live.mydomain.de/signalr/negotiate”协商。
如果我查看调试器的“网络”选项卡,我看不到任何对服务器的调用。所以看起来 SignalR 在调试消息之后就死了。
有什么想法吗?
【问题讨论】:
-
在jquery.signalr.1.0.0-rc2.js文件中的negotiate request的success和error handler中打断点,调用哪个,取值是多少?
-
@N.TaylorMullen :我再次检查了 IE10 和 IE9。使用 IE 进入成功分支,使用 IE9 进入错误分支。消息是“Zugriff verweigert”(拒绝访问)。错误在 jQuery-1.6.4 的第 7428 行抛出。就是这样:transport.send(requestHeaders, done);有什么想法吗?
-
我假设 IE10 使用 WebSockets 传输,而 IE9 使用 LongPolling 对吗?
-
您应该做的第一件事是更新到 1.0.0。听起来永远框架失败了。您可以使用重现项目和重现步骤提交错误吗?作为一种解决方法,您可以尝试在那些较旧的浏览器上强制进行长轮询,看看它是否有所作为。
-
@N.TaylorMullen 不,IE10 正在使用长轮询,因为我的服务器仍然是 .NET 4.0 并且还不支持 Websockets。 IE9 什么都没用,它失败了:)
标签: asp.net cross-domain signalr