Немного предыстории: я обычно работал над небольшими проектами, для которых не требовалась значительная архитектура или проблемы масштабирования (например, разработка небольших веб-приложений с использованием веб-форм и MVC).
Что яЯ работаю над: сейчас я создаю набор приложений WCF (сервис WCF, который маршрутизирует сообщения между клиентом-запросчиком и клиентом-ответчиком), который должен быть стабильным, масштабируемым и, очевидно, отзывчивым.
Что я делаю: у меня есть «брокерская служба», выполняющая две конечные точки, одну для клиентов-запросчиков и одну для клиентов-респондентов.Каждая служба и клиент по существу работают со значениями по умолчанию WCF, за исключением того, что ConcurrencyMode имеет значение Reentrant.
//Client
[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
//Service
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant)]
Естественно, что каждый экземпляр службы (PerSession) независим от друг друга и не может взаимодействовать с каждымДругой.Итак, чтобы построить мост между ними, у меня есть класс MessageBroker с одноэлементным экземпляром, к которому сервисы обращаются.Посредник перенаправляет запросы от запрашивающей службы к службе-ответчику и направляет ответы таким же образом.
Меня беспокоит то, чтобы этот один объект / экземпляр направлял все сообщения для всей системы и влияние на производительностьтот.Сейчас каждый из клиентов вызывает свои соответствующие методы Send *, используя предопределенные * асинхронные методы, определенные при добавлении ссылки на службу, а обратные вызовы на клиентах запускают события, используя методы вызова Begin / End делегата события.Кроме того, на данный момент все методы вызываются синхронно.Я подумываю добавить больше многопоточности в форме использования методов вызова Begin / End делегата в брокере (у меня есть еще один вопрос об исчерпании потоков в пуле потоков с использованием этого метода).
Поскольку яЯ новичок во всей этой концепции дизайна / архитектуры, и я хочу знать, является ли то, что я делаю, правильным путем или мне следует подумать о внедрении другой архитектуры (это первое и, казалось бы, самое очевидное,Я придумал).
На самом деле у меня нет наставника, чтобы обмениваться идеями на местном уровне, поэтому я надеюсь, что сообщество может дать небольшое руководство.
Спасибо за любые советы и предложенияили критика.:)