Соединение с веб-службой WCF необъяснимо медленно - PullRequest
2 голосов
/ 17 мая 2011

Моя компания в настоящее время переходит от традиционных веб-сервисов 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. Использование BasicHttpBinding (так как PHP SoapClient не поддерживает более сложную wsHttpBinding).Соединение использует ssl.

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

Ответы [ 2 ]

1 голос
/ 18 мая 2011

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

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

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

1 голос
/ 17 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...