Почему вызов веб-службы может быть медленнее, чем запрос веб-POST - PullRequest
1 голос
/ 24 января 2012

У меня есть веб-сервис .NET, размещенный в IIS. Веб-служба использовалась клиентами в течение последних нескольких лет, и время от времени возникали события тайм-аута, когда клиент находится на медленном соединении (например, GPRS). С другой стороны, клиентам иногда приходится помещать некоторые данные на другую веб-страницу (часть веб-приложения ASP.NET), и обычно размер данных в запросах POST превышает фактическую полезную нагрузку при вызовах веб-службы. Однако запросы POST выполняются намного быстрее по сравнению с вызовами веб-службы.

Чтобы установить это в дальнейшем, я создал тестовый веб-сервис с одним методом и другой отдельной веб-страницей с точно такой же операцией, то есть получил 100 КБ и отправил обратно 100 КБ (случайные байты), и я использовал тестовый клиент для вызова метода веб-службы как а также сделал пост на веб-странице и получил ответ обратно, используя тот же клиент. Разница в получении ответа от веб-службы и ответа на запрос веб-публикации огромна, т.е. около 1200 мс. Почему это так? Есть ли такая конфигурация в веб-сервисе, которая будет иметь такое большое значение? Это стек вызовов SOAP? Сериализация / Desrialization?

1 Ответ

0 голосов
/ 24 января 2012

Этому может способствовать ряд факторов.

Первое, что приходит мне в голову, это то, что SOAP можно считать подробным протоколом.Таким образом, в полезной нагрузке XML много данных, идущих в обе стороны.XML является многословным сам по себе, и это не самая быстрая вещь во вселенной для обработки.Конечно, вы можете использовать оптимизированную библиотеку для обработки ее данных, но она будет разбита на деревья объектов, а затем вы сможете пройтись по узлам, чтобы перейти к нужным данным.Если вы не используете XPath, который просто сделает то же самое.

Это все предполагает, что вы на самом деле используете SOAP.И что ваш WebService правильно настроен.И что при подключении к веб-службе не происходит потеря пакетов.И что ваш брандмауэр не создает проблем.И что нет никаких затрат на шифрование / дешифрование.

По моему опыту, одна вещь, которая часто вызывает существенное замедление на стороне сервера, - это одно или несколько исключений.Попробуйте Fiddler trace.

...