2013-03-13 2 views
1

У меня есть службы WCFWCF клиент обертка потокобезопасность

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Single, 
    IncludeExceptionDetailInFaults = true)] 
public class ClientAPI : IClientAPI { ... } 

и .NET обертка создана для этой службы, когда я добавляю Service Reference.

Является ли этот предмет обертки потоком безопасным? Я имею в виду, могу ли я вызвать методы для этого клиентского объекта из разных потоков без синхронизации доступа к самому объекту?

+1

Смотрите: http://blogs.msdn.com/b/drnick/archive/2007/12/18/concurrent-channel-performance.aspx – CodeCaster

+0

Спасибо. Таким образом, он является потокобезопасным. Почему бы вам не опубликовать его как ответ, так что я могу оценить его и закрыть вопрос? – axe

ответ

2

Да, с такой модель ваш экземпляр службы будет создан один раз, и каждый запрос будет обработан последовательно. Но вы должны проверить состояние своей службы, потому что, если она терпит неудачу, вам нужно создать новый экземпляр. Она будет работать, как это, в одном потоке enter image description here

+0

Спасибо. Не могли бы вы объяснить более подробно, почему я должен проверять состояние и почему он должен терпеть неудачу? – axe

+0

@axe Если ваша служба получает исключение, которое не обрабатывается должным образом, ваша служба попадает в состояние Faulted, и все ваши клиенты получат CommunicationObjectFaultedException. См. Http://msdn.microsoft.com/en-us/library/ms789041.aspx о состояниях службы. И в соответствии с http://msdn.microsoft.com/en-us/library/ms789039.aspx вы должны восстановить его - «Создать новый объект». – Alex

Смежные вопросы