Обрабатывает ли WCF запрос Thread Agile?
Я видел много документации о том, как происходит обработка запросов Agile Asp.Net? Я хочу знать, то же самое относится и к обработке запросов WCF. Можем ли мы рассчитывать на то, что поток, который запускает обработку запроса Wcf, завершит его?
Я поддерживаю приложение Wcf, где во многих местах используются переменные ThreadStatic. Хотя код работает, но надежен ли он? Стоит ли его менять или стоит оставить как есть?
1 ответ
При создании службы WCF вы можете установить поведение создания потоков и создания экземпляров службы, украсив класс реализации службы ServiceBehavior
атрибут:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
class SingleCachingHttpFetcher : IHttpFetcher
Вышеприведенный фрагмент кода взят из http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx
РЕДАКТИРОВАТЬ
Я немного углубился в исследование и нашел эту статью: http://blogs.microsoft.co.il/blogs/applisec/archive/2009/11/23/wcf-thread-affinity-and-synchronization.aspx. В основном это говорит о том, что нет, вы не можете быть уверены, что тот же поток, начинающий запрос, будет тем, который завершит его.
РЕДАКТИРОВАТЬ 2
Этот вопрос обсуждался ранее в Stackru. Он ссылается на Как сделать службу STA STA (однопоточную), где есть описание того, как создать OperationBehavior, который будет вызывать однопоточную квартиру. Пример касается вызова компонентов графического интерфейса, но он должен работать и для других однопоточных требований.