Веб-сервис ASP.NET WebMethod - PullRequest
0 голосов
/ 30 апреля 2009

У меня есть веб-метод .asmx, которому я успешно звоню с jquery.ajax. Веб-метод работает нормально. Тем не менее, он работает очень медленно.

Сам метод сейчас очень мало работает. Я добавил CacheDuration = 120. Это не помогло. Моя настоящая проблема в том, сколько времени нужно, чтобы вызвать метод. При локальном запуске веб-сайта и запуске отладчика VS2008 с точкой останова в первой строке веб-метода, требуется почти 5 секунд, чтобы добраться до первой строки. Затем нажмите продолжить в отладчике, ответ происходит немедленно. Таким образом, веб-метод не является медленной «вещью».

Кто-нибудь испытывал подобное поведение? Есть ли что-то, что мне нужно установить, чтобы веб-сервис / метод вызывался быстрее?

Код:

[WebService(Namespace = "http://intranet/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class DocumentService : System.Web.Services.WebService
{

  [System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json)]
  [System.Web.Services.WebMethod(EnableSession = true, CacheDuration = 120)]
  public Tree[] GetDocumentTree(string root)
  {........

Ответы [ 3 ]

1 голос
/ 15 мая 2009

Убедитесь, что ваша проблема не только JIT или время загрузки. При первом вызове веб-сервис должен скомпилировать и загрузить сборки, которые могут быть дорогими. Если проблема сохраняется при последующих вызовах, проверьте настройки прокси.

У нас была такая же проблема. Наша задержка была намного значительнее вашей (всего 2 минуты на звонок). Мы вызывали веб-службу из службы Windows, которая работала как пользователь домена. Эта учетная запись пользователя, очевидно, имеет настройки прокси-сервера. Таким образом, для каждого запроса HttpRequest к локальному веб-сервису поддерживающая ServicePoint пыталась получить файл wpad.dat с несуществующего прокси-сервера. Время ожидания этого звонка составило 20 секунд. Хуже того, существует глобальная блокировка кода, которая выбирает прокси в библиотеках .net. Так что звонки складываются в ожидании паузы в сети. Служба, выполняющая вызовы, - это наш процесс очереди, который обрабатывает все наше асинхронное поведение. Таким образом, вся система резервируется.

Если вы хотите увидеть код, посмотрите System.Net.AutoWebProxyScriptEngine.GetProxies в Reflector.

Поскольку у меня нет прав на данную учетную запись, я исправил нашу проблему сегодня, добавив в файл app.config.

Если ваш метод предназначен для вызова с помощью ajax, то вы должны правильно настроить браузер. Попробуйте отключить автоматическое определение настроек в Connections \ Lan Settings. Я немного огляделся в Интернете после того, как обнаружил проблему, и, по-видимому, в IE7 есть проблемы с задержкой, когда эта настройка включена. Если у вас есть прокси-сервер, введите вручную адрес сервера в том же диалоговом окне.

0 голосов
/ 30 апреля 2009

Также используйте JetBrains dotTrace на стороне сервера. Однажды я сделал это и обнаружил, что загрузка определенной страницы .asmx заняла много времени из-за инициализации переменных в ее конструкторах. (В частности, создание ссылок на веб-службы занимает много времени.)

0 голосов
/ 30 апреля 2009

Вы можете использовать Fiddler или FireBug, чтобы выяснить, что такое медленная часть. Убедитесь, что вы нажали на веб-сервис один раз, чтобы он был скомпилирован перед синхронизацией.

...