Хотя я согласен с ответом Джастина , я считаю, что здесь можно пролить немного света на то, как работает WCF.
Вы делаете конкретное утверждение:
У меня такое ощущение, что служба будет ждать, пока не обработает один запрос на переход к следующему.Как я могу использовать многопоточность в WCF для ускорения работы?
Параллельность службы (сколько вызовов она может выполнить одновременно) зависит от значения ConcurrencyMode
для ServiceBehavior
прилагается к услуге.По умолчанию это значение равно ConcurrencyMode.Single
, что означает, что он будет сериализовать вызовы один за другим.
Однако это может быть не такой большой проблемой, как вы думаете.Если InstanceContextMode
вашего сервиса равен InstanceContextMode.PerCall
, то это не проблема;новый экземпляр вашей службы будет создаваться для каждого вызова и не использоваться для каких-либо других вызовов.
Однако, если у вас есть одноэлементный или основанный на сеансе объект службы, вызовы к этому экземпляру реализации службыбудет сериализован.
Вы всегда можете изменить ConcurrencyMode
, но имейте в виду, что если вы это сделаете, вам придется обрабатывать проблемы параллелизма и доступа к вашим ресурсам вручную, как вы явно сказали WCF, что вы будетесделайте это.
Важно не менять их только потому, что вы думаете , что это приведет к повышению производительности.Несмотря на то что не столько для параллелизма, инстанцирующий аспект вашего сервиса во многом является частью идентификации сервиса (если он сеансовый или не на основе сеансов), и их изменение влияет на клиентов, потребляющих сервис, поэтому не делайте этогоэто просто.
Конечно, это ничего не говорит о том, эффективен ли код, который на самом деле реализует сервис.Это определенно то, что нужно рассмотреть, когда вы указываете, что это так.