Служба WCF, которая создает новый поток для каждого нового запроса - PullRequest
6 голосов
/ 16 сентября 2009

Есть ли способ настроить службу WCF для создания нового потока для обработки любого нового входящего запроса?

Ответы [ 3 ]

7 голосов
/ 16 сентября 2009

Да, вы можете сделать это - это называется обработкой запросов «по вызову». ServiceHost создаст новый экземпляр вашего класса обслуживания для каждого входящего запроса для обработки этого одного запроса.

Для этого вам нужно установить класс обслуживания (тот, который реализует интерфейс службы) как «PerCall» - вы делаете это, применяя атрибут к вашему классу обслуживания:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class YourService : IYourService
{
...
}

Марк

3 голосов
/ 24 октября 2009

Зависит от того, что именно вы хотите, но следующее поведение службы решит это:

ServiceBehavior:
ConcurrencyMode=ConcurrencyMode.Multiple
InstanceContextMode=InstanceContextMode.Single

Ваш класс будет одноэлементным, но все вызовы методов будут выполняться в отдельном потоке. Если вам нужна синхронизация, вы должны сделать это вручную.

Также не забывайте заглядывать в удушение, чтобы знать о потенциальных проблемах производительности.

0 голосов
/ 16 сентября 2009

Нет, потому что вы никогда не захотите этого делать. Чего вы действительно пытаетесь достичь?

EDIT

Основываясь на получении дополнительной информации, вот что я думаю.

Если вы просто хотите «залипать» для каждого запроса, вы должны использовать это состояние в экземпляре и использовать InstanceContextMode.PerCall согласно ответу marc_s.

Если вам нужно, чтобы какое-то состояние находилось в локальном потоке для вашего вызова, вы можете рассмотреть возможность использования ICallContextInitializer в качестве способа маршалинга состояния в поток, который WCF выбирает для вызова вашего метода и очистить состояние потока после завершения вызова).

Но вы не должны заботиться о том, «какая нить». WCF справится с этим с помощью пула потоков от вашего имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...