Подключение к веб-службе WCF происходит необъяснимо медленно


Моя компания в настоящее время переходит от традиционных веб-сервисов ASMX к веб-сервисам WCF, потому что нам нужна улучшенная обработка сложных типов, доступных с помощью WCF.

Исследуя проблемы с производительностью веб-страницы, я определил, что самым большим (с некоторым отрывом) провалом в производительности является первоначальное подключение к службе WCF. Когда я говорю начальный, я имею в виду следующий фрагмент кода, каждый раз, когда он вызывается, обновления страницы достаточно, чтобы получить медленный подключение:

$client = new SoapClient("<address-to-webservice>",
array('features' => SOAP_SINGLE_ELEMENT_ARRAYS));

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

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

Connection to WCF Webservice took 1.6509809494019 seconds //(this is just calling new SoapClient)
Connection to ASMX Webservice took 0.24430394172668 seconds

Calling ASMX->Method
ASMX->Method returned in 0.011564970016479 seconds

Calling WCF->Method1
WCF->Method1 returned in 0.011118173599243 seconds

Calling WCF->Method2
WCF->Method2 returned in 0.0038959980010986 seconds

Calling WCF->Method3
WCF->Method3 returned in 0.0041651725769043 seconds

Это работает во внутренней сети, и, очевидно, подключение извне происходит еще медленнее. Как вы можете видеть, подключение к веб-сервису WCF значительно медленнее.

Есть ли способ улучшить производительность (значительно) при подключении к веб-сервису WCF?

ОБНОВЛЕНИЕ:

Некоторая информация о клиенте WCF. Размещенный в IIS 7, Windows Server 2008. Используя базовую привязку wsHttpBinding (так как PHP SoapClient не поддерживает более сложную привязку wsHttpBinding). Соединение осуществляется с использованием протокола ssl.

Кроме того, при подключении через WCFSTORM соединение происходит намного быстрее, что наводит меня на мысль, что проблема, возможно, связана с PHP SoapClient.

Author: lxalln, 2011-05-17

2 answers

Просто предположение, основанное на вашем комментарии WCFStorm в вопросе, может быть, что WSDL, созданный версией ASMX, может быть проще для анализа, чем версия службы WCF. Я не знаю, создает ли PHP SoapClient динамически прокси-сервер из WSDL, но если WSDL, созданный ASMX и WCF, существенно отличается, это может привести к первоначальному узкому месту.

 1
Author: Sixto Saez, 2011-05-17 18:00:19

Наша проблема была решена путем исправления местоположения soap.wsdl_cache_dir в php.ini.

Наши веб-сайты размещались и разрабатывались на компьютерах с Windows, поэтому каталог по умолчанию "/tmp" не работал. Изменение этого на C:\Windows\Temp это означало, что, хотя начальное соединение все еще медленное, все последующие запросы выполняются быстро.

Теперь мы рассмотрим более распространенное решение сценария разминки.

 1
Author: lxalln, 2011-05-18 11:40:24