Запуск узла службы WCF и клиентского прокси WCF в одной форме Windows - PullRequest
0 голосов
/ 01 марта 2010

мы пытаемся создать «сеть» подключенных клиентов, где каждый client.exe также предоставляет сервисный хост, к которому подключаются удаленные клиенты.

Идея состоит в том, что всякий раз, когда удаленный клиент подключается к локальному клиенту, форма используется для визуального отображения подключенных удаленных клиентов. Всякий раз, когда новый удаленный клиент подключается или отключается, форма обновляется из службы isntance.

Однако локальный клиент также обращается к той же форме по разным причинам (предоставьте пользователю способы взаимодействия с удаленными клиентами).

У меня такой вопрос: когда у меня возникнут проблемы с синхронизацией и проблемами с потоками, когда клиентский прокси-сервер и хост-служба получат доступ к форме? Служба настроена с ConcurrencyMode.Single и Session.Required. Клиент-одиночка. Я уже использую блокировки для синхронизации доступа к членам, обратные вызовы из сервиса также поточно-ориентированы. Тем не менее, могут ли быть тупики? Загрузка минимальна: максимум 2 клиента будут отправлять данные одновременно, а общее количество клиентов не будет превышать 25. В основном, приложение будет использоваться так, чтобы ОДИН (1) клиент мог общаться с ОДНЫМ другим клиентом.

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

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Разве вы не ответили на свой вопрос?

Конечно, у вас будут проблемы с синхронизацией. Некоторые из них будут решены тем, что элементы управления WinForms могут быть доступны только из потока, который их создал. Вам придется выполнить всю работу вашего пользовательского интерфейса в этом потоке, вызвав методы Control.Invoke или Control.BeginInvoke.

С другой стороны, нет никакой внутренней проблемы с размещением службы WCF в том же процессе, что и прокси-серверы WCF. Фактически, я недавно смог написать модульный тест, который использовал прокси-класс для доступа к фиктивной службе, которая была размещена в модульном тесте.

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

Как только у вас есть несколько потоков и блокировок, у вас могут возникнуть взаимные блокировки, но они являются ошибками, а не внутренними проблемами в дизайне.

В конкретном случае не забудьте использовать Invoke для доступа к форме, поскольку вы можете сделать это только в потоке, который ее создал.

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