WCF — использование нескольких привязок, включая REST (WebHttpBinding) в одной служебной библиотеке?

Я хочу предоставить свой сервисный уровень (который в настоящее время написан как стандартная библиотека классов с POCO) как для внешнего, так и для внутреннего потребления. Внешние клиенты будут использовать его через API-интерфейсы в стиле REST, в то время как внутренне мое приложение MVC будет использовать его через привязку net.tcp для повышения производительности.

Как сделать это элегантно? Я могу написать 2 оболочки: одну для REST, используя функции VS2010 Beta 2 REST, а другую — с использованием стандартных привязок WCF.

Могу ли я сделать это в одной обертке? или лучше просто рефакторинг моих существующих сервисов как WCF и предоставление доступа к различным конечным точкам с использованием разных привязок, таких как WebHTTPBinding, WsHttpBinding и т. д.

С уважением,

Аджай


person Ajay    schedule 07.12.2009    source источник


Ответы (3)


Ваша библиотека служб будет содержать только реализацию службы — ваши контракты службы (и данных) должны находиться в отдельной сборке «Контракты».

Вопрос хостинга и того, какой протокол использовать, решается вашей службой host — это может быть IIS, отдельная служба NT, консольное приложение или что-то в этом роде. Это полностью не зависит от вашего класса обслуживания и вашей библиотеки обслуживания.

Так что да, вы можете легко создать библиотеку служб, а затем предоставить эту службу множеству конечных точек на вашем узле службы — эти две вещи должны быть полностью отделены друг от друга.

person marc_s    schedule 07.12.2009
comment
Это совершенно не зависит от вашего класса обслуживания и вашей библиотеки обслуживания. на практике это не обязательно вся история. Например. если вы хотите предоставить услугу через два разных файла SVC. Это потребует от вас предоставления выделенных реализаций, даже если они являются производными реализациями от общей. Без него просто невозможно сослаться на конфигурацию службы. Вы согласны? - person Alex; 08.12.2009
comment
@Alex: согласен, но мне это кажется крайним случаем. Зачем вам когда-либо хотеть предоставлять один и тот же сервис через два отдельных файла *.svc? Плюс: все, что находится в производстве, я бы все равно сам разместил.... - person marc_s; 08.12.2009
comment
Мне это понадобилось в нескольких размещенных службах IIS, используемых клиентами, реализованными на различных технологических стеках (PHP, Java, .NET). - person Alex; 09.12.2009

Конечно, вы можете просто добавить их в файл конфигурации или с помощью кода.

person Dani    schedule 07.12.2009

Функции REST VS 2010 Beta 2 сами по себе построены поверх WCF, поэтому, если вы хотите их использовать, вам все равно придется преобразовать свою службу в службу WCF. В этот момент, как говорят Дани и marc_s, вы можете очень легко добавить в службу дополнительные конечные точки через файл конфигурации.

person Aaron    schedule 07.12.2009