none
Ajax запрос к httphandler на iis RRS feed

  • Вопрос

  • Здравствуйте,

    Написал с помощью объекта xmlhttprequest, progress bar контрол, который отправляет запросы на сервер, и получает ответы с данными от него. На локальном visual studio веб-сервере работает, как только переношу проект на веб-сервер с авторизацией запросы не доходят, в фидлере показывается ошибка 401(первый один два запрос, иногда вообще не показывает), а потом все запросы с ошибкой 404

     

    Код ajax запроса:

     

     function progressbar() {
       var xmlHttp = createXMLHttp();
       if (xmlHttp) {
        var gd = document.getElementById("ctl00_ContentPlaceHolder_guidHiddenField").value;
        xmlHttp.open("GET", 'uamsa_handlerPercents.uamsa_ascx?gd='+gd, true );
        xmlHttp.onreadystatechange = function () {
         if (xmlHttp.readyState == 4) {
          if (xmlHttp.status == 200) {
           var response = xmlHttp.responseText;
           
            if (xmlHttp.responseText != "") {
             document.getElementById('ctl00_ContentPlaceHolder_labelPercents').innerHTML = xmlHttp.responseText;
            }
           }
          }
         }
        };
        xmlHttp.send(null);
       }
      }
    

     


    Код handler (лежит в App_Code):

     

     public void ProcessRequest(HttpContext context)
     {
      var gd = context.Request.QueryString[Guid].ToString();
    
      context.Cache.Insert(IsStop + gd, DateTime.Now);
      context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    
      context.Response.ContentType = "text/plain";
    
      
        context.Response.Write(context.Cache[CacheName + gd].ToString());
      
     }
    

     


    данный в кэш заносятся вовремя выполнения серверного обработчика событий.

    web.config (это не глобальный конфиг приложения):

     

    <?xml version="1.0"?>
    <configuration>
     <system.web>
      <httpHandlers>
      <add path="uamsa_handlerPercents.uamsa_ascx" verb="*" type="UAMSA_ProgressPercentsHttpHandler"/>
      </httpHandlers>
      <httpRuntime maxRequestLength="100000"/>
     </system.web>
     <system.webServer>
     <handlers>
      <add name="uamsa_percent_handler" path="uamsa_handlerPercents.uamsa_ascx" verb="*" type="UAMSA_ProgressPercentsHttpHandler"/>
     </handlers>
     </system.webServer>
    </configuration>
    
    

    На веб-сервере стоит windows server 2003 r2, iis 6 вроде бы 6 (не работал раньше с реальными веб-серверами).

     

    Поставил в настройках iis :

    Properties-Configuration-Add

    executable:c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll

    extansion: uamsa_ascx

    limit to: GET,

    кроме моего приложения на сервере еще много приложений, поэтому не уверен на счет глобальных настроек.

    В методе open объекта xmlhtpprequest, есть два дополнительных параметра, username и password, если это то что нужно, то я не могу знать пароль, и как следствие проверить этот вариант.

     

    В общем задача мне кажется часто встречаемая, но в гугле ничего толкового не нашел.Может кто сталкивался или знает как решить проблему?

    Спасибо.

     


    • Изменено Denis99 28 июля 2011 г. 16:53
    27 июля 2011 г. 14:34

Ответы

  • Здравствуйте коллега.

    Итак, в чем на мой взгляд состоит некорректность метода, как исправить:

    1. Вы используете GET запрос, следовательно, давайте в секции httpHandlers вашего web.config'а и поставим  аттрибут verb="GET"

    2. Вы используете нестандартное расширение запроса - uamsa_ascx. Думаю, помимо того что вы указали, следует еще снять галочку "Проверка наличия файлов". В английской версии ОС, думаю это будет звучат как нечто "Check file existense".

    3. Используете ли вы какую-либо аутентификацию своего веб-приложения? Если да, то действительно, если пользоваться вэб-запросом в момент, когда вышло время авторизации, или когда она не была проведена, вам будет возвращатся ошибка выполнения запроса.




    1 августа 2011 г. 6:16