Прежде всего опишу текущее состояние:
Сервер состоит из нескольких WCF-сервисов, размещенных в одном или нескольких win-сервисах на разных машинах.
- Сервис, отвечающий за получение данных с разных устройств. Связь с устройствами реализована с помощью сокетов. Режим экземпляра службы - синглтон.
- Служба брокера данных — отвечает за сохранение данных и обмен ими по запросу. Режим экземпляра - синглтон.
- Служба конфигурации — отвечает за изменение базы данных конфигурации и работу с консолью администрирования (приложение WPF, например SSMS). Обрабатывает соединения с консоли, управление подписчиками и т. д. Режим экземпляра — singleton.
- Служба клиентского доступа - то же самое, что и выше для управления клиентами, но также уведомляет клиентов о новых данных и действует как фасад для служебной шины. И снова синглтон.
- Служба управления идентификацией — проверяет разрешения и возвращает результат. Синглтон.
Все эти сервисы связаны с NServiceBus, и мне очень нравится, как это работает на данный момент.
Но:
Слишком много синглетонов. В основном потому, что для использования служебной шины у меня должен быть один ее экземпляр. Я не знаю, может быть, я могу использовать шину nservice в режиме сеанса, но не знаю, как справиться с проблемой, что все эти службы будут использовать одну очередь.
А если у меня будет 300+ клиентов? синглтон может перестать отвечать..
И я хотел попросить некоторых критиков обо всем этом, и, может быть, кто-нибудь мог бы что-то предложить.
Заранее спасибо.
Алексей