У меня странная проблема с параллелизмом WCF и sendTimeout.
Это мои тестовые программы:
Служба WCF: использует привязку net.Tcp, устанавливает InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode =ConcurrencyMode.Multiple
Это означает, что сервис будет использовать несколько тад для обработки запросов клиента.
И результат теста улучшил его, я запускаю 20 потоков для вызова метода сервиса через один и тот же канал связи.
Метод обслуживания очень прост:
public void GetData(int threadID)
Клиент вызовет этот метод со своим threadID, служба выведет оба идентификатора потока клиента и службы.
Это выходные данные службы:
В: 06.03.2012 14:51:12 Начало потока процесса: 7420, идентификатор потока сервера: 3948
В: 3/6 /2012 2:51:42 PM Запуск потока процесса: 3600, идентификатор потока сервера: 3948
В: 06.03.2012 14:52:12 Запуск потока процесса: 6804, идентификатор потока сервера: 3948
В: 06.03.2012 14:52:14 Началопоток обработки: 5840, идентификатор потока сервера: 540
В: 06.03.2012 14:52:15 Начало обработки потока: 5688, идентификатор потока сервера: 4000
В:06.03.2012 14:52:16 Начало потока процесса: 6220, идентификатор потока сервера: 5556
В: 06.03.2012 14:52:17 Начало потока процесса: 6332, серверID потока: 3380
В: 06.03.2012 14:52:18 Начало потока процесса: 7788, идентификатор потока сервера: 548
В: 06.03.2012 2:52:19 PM Запуск потока процесса: 7060, идентификатор потока сервера: 6060
В: 06.03.2012 14:52:20 Запуск потока процесса: 4724, идентификатор потока сервера: 3836
В: 06.03.2012 14:52:21 Начало процесса: 6728, идентификатор потока сервера: 420
В: 06.03.2012 14:52:22 Начало процессапоток: 7984, идентификатор потока сервера: 6036
В: 06.03.2012 14:52:23 Начало обработки потока: 580, идентификатор потока сервера: 3012
В: 3 /6/2012 14:52:24 Начало потока процесса: 2412, идентификатор потока сервера: 5472
В: 06.03.2012 14:52:25 Начало потока процесса: 2664, идентификатор потока сервера: 172
В: 06.03.2012 14:52:26 Начало потока процесса: 6820, идентификатор потока сервера: 5500
В: 06.03.2012 14:52:27 Запускпоток обработки: 3340, идентификатор потока сервера: 1056
В: 06.03.2012 14:52:28 Начало обработки потока: 6584, идентификатор потока сервера: 3052
В:06.03.2012 14:52:29 Начало потока процесса: 6156, идентификатор потока сервера: 5784
В: 06.03.2012 14:52:30 Начало потока процесса: 6756, серверid потока: 724
Но ... странная вещь происходит, когда я устанавливаю sendTimeout на стороне клиента со значения по умолчанию от 00:01:00 до 00:10:00, результат выглядит так:
At: 06.03.2012 14:57:31 Начало потока процесса: 3660, идентификатор потока сервера: 5376
В: 06.03.2012 14:58:01 Начало потока процесса: 6576,ID потока сервера: 5376
В: 06.03.2012 14:58:31 Начало потока процесса: 7720, идентификатор потока сервера: 5376
В: 06.03.2012 2: 59: 13: 00 Запуск потока процесса: 8148, идентификатор потока сервера: 5376
В: 06.03.2012 14:59:31 Начало потока процесса: 7356, идентификатор потока сервера:5376
В: 06.03.2012 15:00:01 Начало потока процесса: 8060, идентификатор потока сервера: 5376
В: 06.03.2012 3:00:31PM Начало процесса: 6512, идентификатор сервера: 5376
В: 06.03.2012 15:01:01 Начало процесса: 8004, идентификатор сервера: 5376
В: 06.03.2012 15:01:31 Начало потока процесса: 7444, идентификатор потока сервера: 5376
В: 06.03.2012 15:02:01 Начало потока процесса: 5564, идентификатор потока сервера: 5376
В: 06.03.2012 15:02:31 Начало обработки потока: 7788, идентификатор потока сервера: 5376
В: 06.03.201215:03:01 Начало процесса: 6584, идентификатор потока сервера: 5376
В: 06.03.2012 15:03:31 Начало процесса: 5488, идентификатор потока сервера: 5376
В: 06.03.2012 15:04:01 Начало обработки потока: 356, идентификатор потока сервера: 5376
В: 06.03.2012 15:04:32 Началодля обработки потока: 7912, идентификатор потока сервера: 5376
В: 06.03.2012 15:05:02 Начало потока процесса: 700, идентификатор потока сервера: 5376
В: 06.03.2012 15:05:32 Начало процессапоток: 7484, идентификатор потока сервера: 5376
В: 06.03.2012 15:06:02 Начало обработки потока: 3960, идентификатор потока сервера: 5376
Кажется, что servcieтеперь используйте только один поток для обработки клиентских запросов.Есть ли связь между sendTimeout и параллелизмом?Или это связано с механизмом внутренней обработки WCF?