Служба WCF, вызывающая службу WCF — Куда поместить ссылку на службу клиента?

#c# #wcf #visual-studio-2010

#c# #wcf #visual-studio-2010

Вопрос:

Я рассматриваю возможность реализации службы WCF, которая, в свою очередь, вызовет одну (или, возможно, несколько) внешних служб WCF (или, по крайней мере, веб-службы, которые я буду вызывать из кода, используя ссылки на службы WCF)

Мое решение разбито на ServiceLayer, BusinessLogicLayer, DomainLayer, DtoObjects и т.д.

Мой вопрос таков:
вся логика вокруг клиента будет находиться в BusinessLogicLayer — но если я помещу туда ServiceReferences, мне также нужно будет поместить конфигурацию службы в ServiceLayer — поскольку именно отсюда будет выполнен исходный вызов.

Правильно ли это делать?

Или:
Создайте клиента на уровне обслуживания и передайте его в BLL.
Не уверен, что мне нравится эта идея … но это означает только одну конфигурацию.

Или:
Есть ли другой способ?

Ответ №1:

Вы можете рассматривать это как любой код, который вызывает службу WCF, является клиентом WCF, даже если это еще один фрагмент кода, который сам размещен как служба WCF. Из-за этого вам потребуется, чтобы конфигурация на стороне клиента присутствовала и была доступна везде, где выполняется вызов. Я не знаю, есть ли хороший способ поделиться конфигурацией, или это вообще целесообразно … вместо этого я бы выбрал отдельные файлы конфигурации в каждом месте. На самом деле не будет большого дублирования в том, что у вас есть конфигурация на стороне службы в одном месте, а конфигурация на стороне клиента в другом.

Если вы можете использовать обнаружение WCF (http://msdn.microsoft.com/en-us/library/dd456782.aspx ), это может уменьшить объем конфигурации, которую вам придется создавать. Кроме того, использование интерфейсов и ChannelFactory<T> вместо ServiceReferences даст вам более чистую настройку.

Надеюсь, это поможет.

Комментарии:

1. Это не столько создание экземпляра клиентского прокси для службы, сколько то, на каком уровне это делается. Я думаю, что лучше всего сделать это в BLL, чтобы все остальное могло вызывать внешние службы таким же образом — но это означает дублирование разделов конфигурации в проекте BLL И проекте WCF.