2016-07-14 2 views
0

У меня есть система, что запрос данных из веб-сервиса WCF это как так:WCF службы параллельной обработки

WCF1 называет WCF2, WCF2 называет WCF3 и WCF3 делать свою работу и возвращает Ответные

Моя проблема здесь некоторые из операций занимают много времени «около 2 минут» для обработки

Так что если WCF1 отправляет запрос, который занимает много времени, а затем еще один запрос от WCF1, который должен занять секунду, он будет ждать, пока первый запрос завершается

я читал об этой проблеме, некоторые из пользователей сказали использовать

<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple, InstanceContextMode:=InstanceContextMode.PerCall)> _ 

это не решить проблему 100%

Может у пожалуйста совет

ответ

0

Я не думаю, что эти параметры будут решать твоя проблема.

source От:

В PerCall инстансов, параллелизм не имеет значения, потому что каждый сообщение обрабатывается новым InstanceContext и, следовательно, никогда не более чем один поток активен в InstanceContext.

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

Вы должны попытаться сузить то, что действительно вызывает проблемы с производительностью. Посмотрите на базовый код, который звонят ваши службы WCF.

EDIT

С другой SO пост.

С точки зрения поведения: ConcurrencyMode не имеет значения для экземпляра службы PerCall .

С точки зрения производительности: служба PerCall, которая ConcurrencyMode.Multiple должна быть немного быстрее, потому что его не создания и приобретения (ненужную) блокировку потоков, которые ConcurrencyMode.Single использует.

+0

я принял эту конфигурацию из этой статьи он говорит, что это deffers https://www.linkedin.com/pulse/configure-wcf-behaviors-using-instance-context-mode-lapidus-leonid –

+0

Я прочитал эту статью. Мой ответ все еще стоит. Прирост производительности незначительный. Вам следует попытаться определить основные причины проблем с производительностью. Зачем вам нужно звонить 3 WCF-сервисам, когда только один из них действительно что-то делает. –

+0

да, я знаю, это звучит странно, но в нашей компании много брандмауэров, поэтому .. В любом случае, даже если я звоню один в один, проблема будет по-прежнему существовать, потому что служба вызовет услугу .... которая будет одним клиентом, вызовет только сервис, поэтому проблема будет такой же. Так что если я хорошо понимайте, что эта конфигурация не повлияет на производительность, и я должен проверить код службы, а не конфигурацию службы? –

Смежные вопросы