В последующих комментариях к ответам я тоже был неуверен, так что я немного покопался.Вот некоторые убедительные доказательства того, что ClientBase<T>
является поточно-ориентированным - В этом сообщении в блоге обсуждается, как заставить службу WCF работать правильно при наличии одного клиентского прокси, который используется несколькими потоками одновременно (выделение жирным шрифтом в оригинале):
... Однако существует сценарий, в котором установка для параметра ConcurrencyMode значения Multiple в службе PerCall может увеличить пропускную способность для вашей службы, если применяются следующие условия:
Клиент является многопоточным и выполняет вызовы к вашему сервису из нескольких потоков , используя один и тот же прокси .
Связывание между клиентом и службой является связыванием, которое имеет сеанс (например, netTcpBinding, wsHttpBinding w / Reliable Session, netNamedPipeBinding и т. Д.).
Кроме того, доказательства в этом посте противоречат дополнительному замечанию Брайана о том, что WCF сериализует любых многопоточных запросов.В посте показано несколько запросов от одного клиента, выполняющего одновременно - , если используются ConcurrencyMode.Multiple
и InstanceContextMode.PerCall
.
Здесь есть дополнительное обсуждение здесь о влиянии на производительность этого подхода, а также о некоторых альтернативах.