Долго обрабатывается первый запрос

fcs
Дата: 25.06.2010 05:59:18
Всем привет.

Имеем IIS 6
имеем HttpHandler который чего-то делает.
В web.config вот что прописано для этого handler
<httpHandlers>
.............
     <add verb="*" path="kpp.aspx" type="Contract.Generate" validate="false" />            
</httpHandlers>
При первом запросе к этому handler долго ждем ответа (сек 30), при следующих запросах ответ не заставляет себя ждать - приходит быстро.
Если к handler не обращаться примерно минут 30, то ситуация повторяется.
Есть какие-нибудь идеи ?
fcs
Дата: 25.06.2010 06:00:41
Идеи в плане почему так долго обрабатывается в первый раз и почему это происходит с периодичностью ?
МСУ
Дата: 25.06.2010 09:05:19
Вы считаете, что не имея кода хендлера можно ответить на Ваш вопрос?
fcs
Дата: 25.06.2010 09:20:36
Дело в том, что в коде ничего сверхъестественного нет.
Привожу код

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using Microsoft.Win32;
using System.Net;
using System.Security;
using System.Text;
using System.Globalization;

namespace Contract
{
    using CrmSdk;

    public class Generate: IHttpHandler
    {
        public Generate()
        {

        }

        public void ProcessRequest(HttpContext context)
        {
            HttpResponse resp = context.Response;
            resp.ContentType = "text/html";            
            
            //Считываем параметры зпроса
            string contract_title = GetParam("title");
            string task_description = GetParam("desc");
            string ownerId = GetParam("ownerId");
            string queueItemId = GetParam("queueItemId");
            int contract_id = 0;

            // Содаем service
            CrmAuthenticationToken token = new CrmAuthenticationToken { AuthenticationType = 0, OrganizationName = "ORG" };
            CrmService crmService = new CrmService
            {
                Url =
                    string.Format("{0}/2007/crmservice.asmx",
                                  Registry.LocalMachine.OpenSubKey(
                                      "Software\\Microsoft\\MSCRM").GetValue("ServerUrl")),
                CrmAuthenticationTokenValue = token,
                Credentials = new NetworkCredential("user", "pass", "login")
            };
            // -------------------------//


            Guid g_ownerId = new Guid(ownerId);
            Guid g_queueId = new Guid(queueItemId);

            task new_task = new task();
            new_task.description = task_description;
            new_task.subject = subject_task;
            Owner task_owner = new Owner();
            task_owner.Value = g_ownerId;
            task_owner.type = EntityName.systemuser.ToString();
            new_task.ownerid = task_owner;
            
                       
            //Проставляем тему.
            new_task.new_tasksubjectid = new Lookup();
            new_task.new_tasksubjectid.Value = new Guid("{53441E7B-F35E-DF11-A70F-00155D01250C}");

            //Проставляем идентификатор            
            Guid g_customer = new Guid("{53441E7B-F35E-DF11-A70F-00155D012505}");
            new_task.regardingobjectid = new Lookup();
            new_task.regardingobjectid.type = EntityName.account.ToString();
            new_task.regardingobjectid.Value = g_customer;            

            try
            {
                Guid taskId = crmService.Create(new_task);
                resp.Write(taskId.ToString());
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                resp.Write(ex.Detail.InnerText);
                resp.Write(ex.Message);
            }         
        }

        private string GetParam(string sName)
        {
            string sValue;            
            sValue = HttpContext.Current.Request.Form[sName] as string;

            if (string.IsNullOrEmpty(sValue))
                sValue = HttpContext.Current.Request.QueryString[sName] as string;

            if (string.IsNullOrEmpty(sValue))
                sValue = String.Empty;

            return sValue;
        }                

        public bool IsReusable
        {
            get { return false; }
        }

    }

}
МСУ
Дата: 25.06.2010 09:33:20
fcs
Дело в том, что в коде ничего сверхъестественного нет.

Ну как же нет. У Вас дергается целый вебметод asmx сервиса. Вообще, попробуйте увеличить таймаут сессии, мне кажется в нем загвоздка.
Если юзаете Forms, то:

<system.web>
    <authentication mode="Forms">
          <forms timeout="50000000"/>
    </authentication>
</system.web>
Starlex
Дата: 25.06.2010 09:47:35
Закомментарьте последовательно разные части кода, чтобы посмотреть, что тормозит. :)
ShSerge
Дата: 25.06.2010 09:50:23
fcs
...При первом запросе к этому handler долго ждем ответа...

Что такое "при первом запросе"? Может, компилится чего.
fcs
Дата: 25.06.2010 10:03:44
автор
Что такое "при первом запросе"?

Копируем (заменяем старую библиотеку) dll на IIS.
Делаем запрос - запрос сразу после обновления (замены dll).
fcs
Дата: 25.06.2010 10:07:55
автор
У Вас дергается целый вебметод asmx сервиса.

Да дергается WebService для работы с CRM.

автор
Если юзаете Forms

Нет используется <authentication mode="Windows"/>
fcs
Дата: 25.06.2010 10:08:30
автор
Закомментарьте последовательно разные части кода, чтобы посмотреть, что тормозит. :)

:) попробую.