我在以下链接中描述并解决了一个问题
...但是我不能使用推荐的解决方案(使用客户端 HTTP 堆栈),因为我使用的是 JavaScript 而不是 Silverlight!
POST /PollingWcfServices/ServiceWcf.svc HTTP/1.1
Accept: */*
Content-Length: 564
Content-Type: application/soap+xml; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: foo
Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=iyr4sf55rm1kypafjdvlhm55
使用以下轮询代码
request.onreadystatechange = function () {
if (request.readyState == 4) {
if (request.status == 200)
//Process and Poll again
else
//Handle errors
}
request.open("POST", url);
request.setRequestHeader("Content-Type", "application/soap+xml;charset=utf-8");
request.send(httpBody);
不幸的是,由于 Session 是在 cookie 中设置的,服务器将尝试按顺序处理相同的会话服务调用。这是长轮询过程的一个大问题。一个简单的解决方案是从标头中删除 Cookie,使其看起来像使用 silverlight 客户端堆栈的 Silverlight 轮询。
request.setRequestHeader,只会追加到标头值;这似乎没有任何区别,因为 cookie 似乎设置在 .send 的头部。
Mozilla 唯一的解决方案,位于
http://www.michael-noll.com/tutorials/cookie-monster-for-xmlhttprequest/
request.channel.loadFlags |= Ci.nsIRequest.LOAD_ANONYMOUS;
也不会删除 ASP.NET_SessionID cookie。虽然它确实删除了 ASPXAUTH cookie。
有没有人在启用 ASP.NET 兼容性/会话的环境中为 AJAX 可访问的长时间运行的服务任务提供不阻塞后续 AJAX 服务请求的解决方案?