powered by simpleCommunicator - 2.0.46     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос про WCF concurrency
7 сообщений из 7, страница 1 из 1
Вопрос про WCF concurrency
    #38157821
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
У меня впечатление такое, что конфигурация WCF concurrency не работает в случае Silverlight клиента.

Эта самая серверная конфигурация такая:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class ConcurrencyService
{ ...

Байндинг basicHttpBinding.

Тем не менее, при вызове из Silverlight клиента (асинхронно), серверный дебаг показывает следующее:

Client Call: 1, Instance=1 Thread=42 Time=16/02/2013 6:33:01 PM

Client Call: 2, Instance=1 Thread=39 Time=16/02/2013 6:33:02 PM

Client Call: 4, Instance=1 Thread=46 Time=16/02/2013 6:33:02 PM

Client Call: 6, Instance=1 Thread=45 Time=16/02/2013 6:33:03 PM ...

Да, клиентский код тривиальный:

for (int k = 0; k < 20; k++)
{
ConcurrencyServiceReference.ConcurrencyServiceClient wc = new ConcurrencyServiceReference.ConcurrencyServiceClient();
wc.DoWorkCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(wc_DoWorkCompleted);
wc.DoWorkAsync(j.ToString());
}



Почему потоки разные?
Спрашиваю потому, что в другом (реальном) случае все выполнияется в одном потоке на сервере несмотря ни на какую ServiceBehavior конфигурацию. Почему это не зависит от конфигурации? Как это контролировать?

Спасибо.
...
Рейтинг: 0 / 0
Вопрос про WCF concurrency
    #38157881
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mabanza,

вот имхо разные потоки ни о чем не говорят, вы уверены что они работают параллельно?
...
Рейтинг: 0 / 0
Вопрос про WCF concurrency
    #38157900
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,

Да, уверен. На сервере стоит искусственная задержка в 5 секунд. Весь процесс для 8 запросов (я убрал сейчас 20 из цикла, слишком много) занимает чуть больше 5 секунд. А должен 5х8=40 секунд.
...
Рейтинг: 0 / 0
Вопрос про WCF concurrency
    #38162708
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mabanza,

так все же нормально.
не понимаю в чем вопрос.
на каждый запрос создается твой класс в отдельном потоке.
ты ж сам так настроил службу.
InstanceContextMode = InstanceContextMode.PerCall вот.
то есть на каждый запрос по классу твоему в отдельном потоке и в этот поток всунут будет запрос.

если ты хочешь, чтобы всегда висел 1 экземпляр класса и генерились потоки то запросов, то

InstanceContextMode =Single, ConcurrencyMode =Multiple
или что ты хочешь то?
...
Рейтинг: 0 / 0
Вопрос про WCF concurrency
    #38163814
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

Да, собственно, ничего не хочу. Я просто спрашиваю почему система работает не определенным образом. Вот реальный пример (предыдущий был тестовый проект с целью разобраться).

Вот другой сервис. С теми же параметрами. С тем же байндингом. На том же IIS. Но реальный доменный сервис.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class TimeCardService : WCFBase
{...

Вот как те же 8 запросов выполняются для него:

CurrentEmployeeId :15 Start Instance:1 Thread:13 Time:2/22/2013 1:01:27 PM
CurrentEmployeeId :15 Stop Instance:1 Thread:13 Time:2/22/2013 1:01:27 PM
CurrentEmployeeId :16 Start Instance:1 Thread:13 Time:2/22/2013 1:01:27 PM
CurrentEmployeeId :16 Stop Instance:1 Thread:13 Time:2/22/2013 1:01:28 PM
CurrentEmployeeId :17 Start Instance:1 Thread:13 Time:2/22/2013 1:01:28 PM
CurrentEmployeeId :17 Stop Instance:1 Thread:13 Time:2/22/2013 1:01:29 PM
CurrentEmployeeId :18 Start Instance:1 Thread:13 Time:2/22/2013 1:01:29 PM
CurrentEmployeeId :18 Stop Instance:1 Thread:13 Time:2/22/2013 1:01:30 PM

Теперь они сериализованы и выполняются друг за другом.
Что случилось? Обращение к HttpContext.Current?
Если да, то нет. Сейчас же пришлю пример, подтверждающий, что HttpContext.Current тут ни причем.

И еще пару слов.

>на каждый запрос создается твой класс в отдельном потоке.
Отнюдь. Вот предельно популярное обьяснение почему. Дивная стстья:

http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and

см. раздел "Instance mode = Per Call and Concurrency = Single"
Спасибо.
...
Рейтинг: 0 / 0
Вопрос про WCF concurrency
    #38165214
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mabanza,

автор, по умолчанию какой именно поток обработает твой реквест - не детерминированно.

но в WCF можно управлять потоками вплоть до того, что все запросы будут обрабатываться твоим собственным потоком(и) с заданными тобою приоритетами и т. п.. или одним потоком :).
...
Рейтинг: 0 / 0
Вопрос про WCF concurrency
    #38167143
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема фикснута, но есть еще вопрос, связанный с concurrency. Для той же конфигурации система обрабатывает только 6 потоков за раз:

CurrentEmployeeId :6 Start Instance:1 Thread:87 Time:2/26/2013 11:26:05 AM
CurrentEmployeeId :7 Start Instance:1 Thread:63 Time:2/26/2013 11:26:05 AM
CurrentEmployeeId :9 Start Instance:1 Thread:68 Time:2/26/2013 11:26:05 AM
CurrentEmployeeId :3 Start Instance:1 Thread:55 Time:2/26/2013 11:26:05 AM
CurrentEmployeeId :2 Start Instance:1 Thread:62 Time:2/26/2013 11:26:05 AM
CurrentEmployeeId :8 Start Instance:1 Thread:20 Time:2/26/2013 11:26:05 AM
CurrentEmployeeId :6 Stop Instance:1 Thread:87 Time:2/26/2013 11:26:06 AM
CurrentEmployeeId :7 Stop Instance:1 Thread:63 Time:2/26/2013 11:26:06 AM
CurrentEmployeeId :9 Stop Instance:1 Thread:68 Time:2/26/2013 11:26:06 AM
CurrentEmployeeId :3 Stop Instance:1 Thread:55 Time:2/26/2013 11:26:06 AM
CurrentEmployeeId :2 Stop Instance:1 Thread:62 Time:2/26/2013 11:26:06 AM
CurrentEmployeeId :8 Stop Instance:1 Thread:20 Time:2/26/2013 11:26:06 AM

Увеличение

<!--<processModel autoConfig="true"/>-->
<processModel autoConfig="false" minWorkerThreads="64" maxWorkerThreads="128" />
в machine.config ничего не дает. Максимальное количество потоков остается 6.
Как это число увеличить?
Спасибо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Вопрос про WCF concurrency
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]