Обрабатывает ли WCF запрос Thread Agile? - PullRequest
4 голосов
/ 01 марта 2010

Я видел много документации о том, как происходит обработка запросов Agile Asp.Net? Я хочу знать, то же самое относится и к обработке запросов WCF. Можем ли мы рассчитывать на то, что поток, который запускает обработку запроса Wcf, завершит его?

Я поддерживаю приложение Wcf, где во многих местах используются переменные ThreadStatic. Хотя код работает, но надежен ли он? Стоит ли его менять или стоит оставить как есть?

1 Ответ

4 голосов
/ 01 марта 2010

При создании службы WCF можно установить поведение создания потоков и создания экземпляров службы, украсив класс реализации службы атрибутом ServiceBehavior:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]<br> class SingleCachingHttpFetcher : IHttpFetcher

Приведенный выше фрагмент кода из http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx

EDIT
Я немного углубился в исследование и нашел эту статью: http://blogs.microsoft.co.il/blogs/applisec/archive/2009/11/23/wcf-thread-affinity-and-synchronization.aspx. В основном это говорит о том, что нет, вы не можете быть уверены, что тот же поток, начинающий запрос, будет тем, который завершит его.

РЕДАКТИРОВАТЬ 2
Этот вопрос обсуждался ранее на StackOverflow . Он ссылается на Как сделать службу WCF STA (однопоточной) , где есть описание того, как создать OperationBehavior, который вызовет однопоточную квартиру. Пример касается вызова компонентов графического интерфейса, но он должен работать и для других однопоточных требований.

...