Использование Web Service клиента в многопоточном приложении?

У нас есть приложение, задача которого в нескольких потоков выполнять запросы к SOAP-сервису. Мы заметили, что при увеличении количества потоков, время на выполнение каждого запроса возрастает на порядок. Чтобы разобраться в чем причина, мы написал SOAP-extension — в результате выяснилось, что уже при 5 потоках на 16-процессорном сервере время на сериализацию составляет примерно 95% от времени запроса, при 10 потоках не дождались выполнения запроса (при 1 потоке время на запрос составляет примерно 150мс).

Кто сталкивался с подобным поведением? Есть подозрение, что внутри web-сервиса, или внутри сериализатора возникают «мертвые» блокировки.

P.S. На каждый поток создается свой отдельный экземпляр web-сервиса.

P.P.S. На десериализацию количество потоков вроде бы не влияет.
  • Вопрос задан
  • 3573 просмотра
Пригласить эксперта
Ответы на вопрос 1
@vadim911
Если речь идет об использовании WCF сервиса, то надо учитывать, что по умолчанию без дополнительных аттрибутов сервис работает в PerCall instance режиме, но при этом в Single concurrency режиме. Что при нагрузке ведет к тому, что потоки выстраиваются в очереди. Поэтому чтобы поднять производительность сервиса, рекомендую выставить ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple).

Более подробно об этом можно почитать тут: www.codeproject.com/KB/WCF/WCFConcurrency.aspx
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы