SELECT *
FROM (SELECT address, COUNT(id) AS cnt
FROM list
GROUP BY address
HAVING ( COUNT(id) > 1 ))
Задержка, возникающая при первом обращении клиента к веб-сервису, вызвана тем, что по умолчанию необходимо скомпилировать dll XmlSerializer для веб-сервиса. Это вызывает 2-4 секунды для первоначального вызова. Конечно, это тот случай, когда приложение веб-сервиса уже запущено, в противном случае вы бы перезапустили его. В этом случае могут помочь другие ответы.
Чтобы ускорить первоначальный вызов, вы можете создать dll XmlSerializer во время компиляции. Вы можете сделать это, включив сборку проекта «Создать сборку сериализации». Это создает MyApplication.XmlSerializers.dll, содержащую информацию веб-службы. Теперь первоначальный вызов упал до 300 мс, предположительно, загрузка DLL. Все звонки там после приема занимают 0 мс.
В Visual Studio щелкните правой кнопкой мыши свой проект и выберите «Свойства». Перейдите на вкладку «Сборка». Там у вас есть опция «Создать сборку сериализации» в разделе «Вывод». Если вы измените значение на «Вкл.», Сборка сериализации будет сгенерирована во время компиляции.
При первом вызове веб-службы или в первый раз после длительной задержки веб-служба должна запуститься. Здесь вы видите задержку. После этого он уже запущен и будет очень быстро отвечать на звонки. Это стандартное поведение веб-службы.
Можно настроить IIS, чтобы keepalive = true, что может повысить производительность.
Дополнительная информация по запросу.
Может случиться так, что сборки сериализации создаются во время выполнения. Вы можете изменить параметры сборки сериализации, используя раскрывающийся список внизу панели Build окна свойств для проекта.
Возможно, вы написали свой веб-сервис для выполнения множества операций при запуске приложения, Это происходит при первом вызове метода в службе.
Возможно, операция выполняется очень медленно, но вы кешируете ответ, что ускоряет последующие вызовы.
Это типично, поскольку приложения ASP.NET компилируют и загружают каталог bin \ в память при первом запросе.
Что делать первым:
Удалите все ненужные dll-файлы из вашего bin. каталог. (Я видел, как люди отправляют nunit.dll)
Прекомпилируйте приложение ASP.NET, чтобы IIS не нуждался в этом. См. « Выпущена поддержка проекта веб-развертывания VS 2008 »
Не уверен, что это решит медленное раскручивание WS в «самый первый раз», так как я предполагаю, что есть загрузка компиляции и загрузка .net DLL, но вы можете почти Устраните любые будущие холодные запуски, гарантируя, что пул приложений, в котором находится WS, настроен правильно.
По умолчанию IIS6 имеет «респаун» на холостом ходу после нескольких минут или событий «перезапуска», которые эффективно перезапускают WS каждый раз. Если вы довольны тем, что служба стабильна, то в этом нет необходимости.
Убедительная рекомендация - наличие у WS собственного выделенного пула приложений (не разделяющего неподходящий пул).
Недавно я обнаружил, что в наших 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"%>