|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
Привет. У меня впечатление такое, что конфигурация 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 конфигурацию. Почему это не зависит от конфигурации? Как это контролировать? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2013, 17:50 |
|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
mabanza, вот имхо разные потоки ни о чем не говорят, вы уверены что они работают параллельно? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2013, 18:27 |
|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
netivan, Да, уверен. На сервере стоит искусственная задержка в 5 секунд. Весь процесс для 8 запросов (я убрал сейчас 20 из цикла, слишком много) занимает чуть больше 5 секунд. А должен 5х8=40 секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2013, 18:42 |
|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
mabanza, так все же нормально. не понимаю в чем вопрос. на каждый запрос создается твой класс в отдельном потоке. ты ж сам так настроил службу. InstanceContextMode = InstanceContextMode.PerCall вот. то есть на каждый запрос по классу твоему в отдельном потоке и в этот поток всунут будет запрос. если ты хочешь, чтобы всегда висел 1 экземпляр класса и генерились потоки то запросов, то InstanceContextMode =Single, ConcurrencyMode =Multiple или что ты хочешь то? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2013, 18:41 |
|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
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" Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2013, 17:59 |
|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
mabanza, автор, по умолчанию какой именно поток обработает твой реквест - не детерминированно. но в WCF можно управлять потоками вплоть до того, что все запросы будут обрабатываться твоим собственным потоком(и) с заданными тобою приоритетами и т. п.. или одним потоком :). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2013, 17:23 |
|
Вопрос про WCF concurrency
|
|||
---|---|---|---|
#18+
Проблема фикснута, но есть еще вопрос, связанный с 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. Как это число увеличить? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2013, 20:34 |
|
|
start [/forum/topic.php?fid=19&msg=38165214&tid=1397108]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 354ms |
0 / 0 |