Я пытаюсь преобразовать существующий проект, использующий .NET Remoting, для использования WCF. Структура проекта следующая:
- UI
- Бизнес-уровень
Проект BusinessLayer представляет собой библиотеку классов, содержащую активируемый клиентом объект DistributedProcessor с методом IResult Process(IJobProcessor). Интерфейсы IJobProcessor и IResult и конкретные классы находятся в библиотеке BusinessLayer. Конкретные классы IJobProcessor, в свою очередь, используют множество классов в BusinessLayer.
Для .NET Remoting эта ситуация идеальна. Распределенная часть — это просто служба Windows, которая содержит BusinessLayer и прослушивает определенный порт. Клиентская сторона создает удаленный объект, используя Activator.GetObject().
Чтобы преобразовать это в WCF, я понял, что у меня есть проблема с циклической зависимостью, если я структурирую проект следующим образом:
- UI
- BusinessLayer — ссылки на WcfService
- WcfService — ссылки на BusinessLayer
Службе нужна ссылка на BusinessLayer, чтобы я мог передавать объекты по сети. BusinessLayer нуждается в ссылке на WcfService, чтобы он мог вызвать метод IResult Process(IJobProcessor) в WcfService.
Могу ли я вынести интерфейсы IResult и IJobProcessor в отдельный проект BusinessLayerDistributed, например:
- UI
- BusinessLayer — ссылки на BusinessLayerDistributed
- BusinessLayerDistributed
- WcfService — ссылки на BusinessLayer, BusinessLayerDistributed
Мой вопрос: если конкретные классы для всех этих интерфейсов все еще находятся в BusinessLayer, будут ли объекты IResult и IJobProcessor должным образом гидратированы как их конкретные классы при передаче в службу? Есть ли какой-нибудь трюк, чтобы сделать это с WCF?