2012-06-20 1 views
0

Я собрал приложение .net winform, которое использует службу wcf, открытую другим. NET-приложением, работающим как служба Windows.wcf службы для межпроцессного взаимодействия

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

Я хочу знать, использую ли я правильный выбор свойств при определении службы wcf в службе Windows .net.

Поведение WCF службы определяется как:

[ServiceBehavior( 
    ConcurrencyMode = ConcurrencyMode.Single, 
    InstanceContextMode = InstanceContextMode.Single)] 

Я выбрал «InstanceContextMode» как сингл, так что я знаю, что объекты в службе ФОС не воссозданы каждый раз, когда метод службы WCF вызывается UI клиент.

Однако при чтении свойства ConcurrencyMode для выбора на MSDN я немного запутался. На базовом уровне я понимаю, что свойство ConcurrencyMode определяет, поддерживает ли служба wcf один, несколько или повторный вызов.

Означает ли это, что если мое клиентское приложение пользовательского интерфейса многопоточно, и я вызываю в методы обслуживания wcf из этих потоков, я должен выбрать режим «параллелизма» как «несколько», и если мой клиент UI не многопоточен, я должен выбрать режим «параллелизма» как «одиночный»? В моем клиентском приложении пользовательского интерфейса не работает несколько потоков. Все операции выполняются в основном потоке пользовательского интерфейса через обработчики событий (посредством щелчков кнопок, выбора сокетов и т. Д.)

У меня возникают ситуации, когда после установки приложения на тестовом компьютере Windows мой клиент пользовательского интерфейса иногда не удается подключиться к службе wcf. Он просто продолжает ждать вызова метода Connect для объекта клиента wcf, а затем в конечном итоге отключается. Я хочу знать, связано ли это с выбором «ConcurrencyMode», который я сделал. Или это проблема канала связи NetNamedPipe?

Прошу совета.

Заранее спасибо.

Subbu

ответ

0

Выберите режим concurency в несколько только если ваш объект хозяин потокобезопасен т.е. вы вручную реализовать блокировку на общий ресурс или ваш объект хоста не имеют какой-либо общий или уровень класса объектов на всех. Если хост-объект не является потокобезопасным, используйте режим согласованности как один, так как в этом случае wcf автоматически реализует блокировку для вас, только один запрос будет обрабатываться одновременно в контексте, параллельная будет поставлена ​​в очередь. Поэтому здесь решение должно действительно зависеть от того, является ли ваш объект хоста потокобезопасным или нет.