Показать сообщение отдельно
  #1 (permalink)  
Старый 23.02.2012, 12:56
Новичок на форуме
Отправить личное сообщение для Zhirinovsky Посмотреть профиль Найти все сообщения от Zhirinovsky
 
Регистрация: 23.02.2012
Сообщений: 1

Jquery ajax в Operа к ASP.NET скрипту по таймеру, IIS выдает 403.9
Вот клиентский скрипт:

<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 в обоих браузерах стоит...
Ответить с цитированием