Веб-служба ASMX замедляет первый запрос

    SELECT *
    FROM (SELECT  address, COUNT(id) AS cnt
    FROM list
    GROUP BY address
    HAVING ( COUNT(id) > 1 ))
23
задан John Saunders 13 August 2009 в 17:04
поделиться

5 ответов

Задержка, возникающая при первом обращении клиента к веб-сервису, вызвана тем, что по умолчанию необходимо скомпилировать dll XmlSerializer для веб-сервиса. Это вызывает 2-4 секунды для первоначального вызова. Конечно, это тот случай, когда приложение веб-сервиса уже запущено, в противном случае вы бы перезапустили его. В этом случае могут помочь другие ответы.

Чтобы ускорить первоначальный вызов, вы можете создать dll XmlSerializer во время компиляции. Вы можете сделать это, включив сборку проекта «Создать сборку сериализации». Это создает MyApplication.XmlSerializers.dll, содержащую информацию веб-службы. Теперь первоначальный вызов упал до 300 мс, предположительно, загрузка DLL. Все звонки там после приема занимают 0 мс.

В Visual Studio щелкните правой кнопкой мыши свой проект и выберите «Свойства». Перейдите на вкладку «Сборка». Там у вас есть опция «Создать сборку сериализации» в разделе «Вывод». Если вы измените значение на «Вкл.», Сборка сериализации будет сгенерирована во время компиляции.

35
ответ дан 29 November 2019 в 01:18
поделиться

При первом вызове веб-службы или в первый раз после длительной задержки веб-служба должна запуститься. Здесь вы видите задержку. После этого он уже запущен и будет очень быстро отвечать на звонки. Это стандартное поведение веб-службы.

Можно настроить IIS, чтобы keepalive = true, что может повысить производительность.

Дополнительная информация по запросу.

Может случиться так, что сборки сериализации создаются во время выполнения. Вы можете изменить параметры сборки сериализации, используя раскрывающийся список внизу панели Build окна свойств для проекта.

Возможно, вы написали свой веб-сервис для выполнения множества операций при запуске приложения, Это происходит при первом вызове метода в службе.

Возможно, операция выполняется очень медленно, но вы кешируете ответ, что ускоряет последующие вызовы.

10
ответ дан 29 November 2019 в 01:18
поделиться

Это типично, поскольку приложения ASP.NET компилируют и загружают каталог bin \ в память при первом запросе.

Что делать первым:

Удалите все ненужные dll-файлы из вашего bin. каталог. (Я видел, как люди отправляют nunit.dll)

Прекомпилируйте приложение ASP.NET, чтобы IIS не нуждался в этом. См. « Выпущена поддержка проекта веб-развертывания VS 2008 »

4
ответ дан 29 November 2019 в 01:18
поделиться

Не уверен, что это решит медленное раскручивание WS в «самый первый раз», так как я предполагаю, что есть загрузка компиляции и загрузка .net DLL, но вы можете почти Устраните любые будущие холодные запуски, гарантируя, что пул приложений, в котором находится WS, настроен правильно.

По умолчанию IIS6 имеет «респаун» на холостом ходу после нескольких минут или событий «перезапуска», которые эффективно перезапускают WS каждый раз. Если вы довольны тем, что служба стабильна, то в этом нет необходимости.

Убедительная рекомендация - наличие у WS собственного выделенного пула приложений (не разделяющего неподходящий пул).

2
ответ дан 29 November 2019 в 01:18
поделиться

Недавно я обнаружил, что в наших ASMX-файлах мы ссылаемся только на имя класса. Мы получили реализацию сервиса в отдельной сборке для каждого ASMX-файла. Это заставляет .NET framework сканировать всю папку bin в поисках сборки, содержащей реализацию. По мере роста вашего приложения веб-сервиса это займет больше времени. Эту проблему можно решить, включив не только имя класса в определение ASMX, но и имя сборки.

Наш ASMX выглядел так:

<% @ WebService Language = "C #" CodeBehind = "MyService.cs" Class = ”MyWebservice”%>

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

<% @ WebService Language = "C #" CodeBehind = "MyService.cs" Class = "MyWebservice, MyWebservice.Implementation.Assembly"%>

5
ответ дан 29 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: