Я пытаюсь преобразовать существующий проект, использующий .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?