Вот клиентский скрипт:
<script type="text/javascript">
function getOutput() {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Console.aspx/GetOutput",
data: "{'parameter': '" + $("#Param").val() + "'}",
dataType: "json",
async: false,
success: function(result) {
if (result.d != "")
$("#txtConsole").html($("#txtConsole").html() + "<br />" + result.d);
}
});
return false;
}
$(document).ready(function() { setInterval(function() { getOutput(); }, 1000); });
</script>
Скрипт дергает WebMethod, объявленный на ASPX-странице каждую секунду на предмет обновленных данных на стороне сервера. (Можно, конечно, заюзать WebSockets или Comet, но это уже другой вопрос).
Вот этот самый веб-метод:
[WebMethod]
public static string GetOutput(string parameter)
{
string output = String.Empty;
if (ValidateParam(parameter) && !String.IsNullOrEmpty((string)HttpContext.Current.Session["output"]))
{
output = (string)HttpContext.Current.Session["output"];
HttpContext.Current.Session["output"] = String.Empty;
}
return output;
}
Всё работает правильно в Firefox 5.0+ и IE 8+! НО в Опере 11 версии после 10 запроса (ага, это как раз лимит одновременных соединений IIS) - сервер выдает 403.9 - превышен лимит
ОДНОВРЕМЕННЫХ соединений.
Вот лог IIS'a для Оперы:
2012-02-22 07:21:31 10.4.24.56 <Domain>\<Username> GET - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:34 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:35 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:37 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:38 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:40 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:41 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:43 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:44 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:46 10.4.24.56 <Domain>\<Username> POST - 200 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:46 10.4.24.56 - POST - 403 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
2012-02-22 07:21:47 10.4.24.56 - POST - 403 Opera/9.80+(Windows+NT+5.1;+U;+ru)+Presto/2.9.168+Version/11.51 -
etc ... 403 errors
Вот лог IIS'a для FF:
2012-02-22 07:23:27 10.4.24.56 <Domain>\<Username> GET - 200 Mozilla/5.0+(Windows+NT+5.1;+rv:5.0.1)+Gecko/20100101+Firefox/5.0.1 -
2012-02-22 07:23:28 10.4.24.56 <Domain>\<Username> POST - 200 Mozilla/5.0+(Windows+NT+5.1;+rv:5.0.1)+Gecko/20100101+Firefox/5.0.1 -
2012-02-22 07:23:28 10.4.24.56 <Domain>\<Username> POST - 200 Mozilla/5.0+(Windows+NT+5.1;+rv:5.0.1)+Gecko/20100101+Firefox/5.0.1 -
2012-02-22 07:23:30 10.4.24.56 <Domain>\<Username> POST - 200 Mozilla/5.0+(Windows+NT+5.1;+rv:5.0.1)+Gecko/20100101+Firefox/5.0.1 -
2012-02-22 07:23:31 10.4.24.56 <Domain>\<Username> POST - 200 Mozilla/5.0+(Windows+NT+5.1;+rv:5.0.1)+Gecko/20100101+Firefox/5.0.1 -
etc ... Anything is okay!!!
После всего этого, я решил посмотреть заголовки запросов, отправляемых бровзерами. Вот они:
Opera:
Connection:Keep-Alive
Content-Length:19
Content-Type:application/json; charset=utf-8
Accept:application/json, text/javascript, */*
Accept-Encoding:gzip, deflate
Accept-Language:ru-RU,ru;q=0.9,en;q=0.8
Authorization:Negotiate
<large base64 string here>
Expect:100-continue
Host:10.4.24.56
Referer:http://10.4.24.56/Default.aspx
User-Agent:Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51
X-Requested-With:XMLHttpRequest
Content-Transfer-Encoding:binary
Firefox:
Cache-Control:no-cache
Connection:keep-alive
Pragma:no-cache
Content-Length:19
Content-Type:application/json; charset=utf-8
Accept:application/json, text/javascript, */*
Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7
Accept-Encoding:gzip, deflate
Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Host:10.4.24.56
Referer:http://10.4.24.56/Default.aspx
User-Agent:Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1
X-Requested-With:XMLHttpRequest
Как заставить эту вещь работать правильно в опере? Т.е. складывается ощущение что для каждого ajax-запроса, Opera с сервером держит новое подключение (отсюда превышен лимит). А в FF и IE все нормально. Но ведь Keep-Alive в обоих браузерах стоит...