2010-04-29 3 views
3

Разделяет проект, содержащий wcf-интерфейс и datacontracts, и используя их через ChannelFactory для использования службы по принципам SOA?WCF ChannelFactory против принципов SOA?

Мой архитектор рекомендует, чтобы генерация прокси с помощью Add Service Reference предпочтительнее.

ответ

0

Я думаю, что зависит от целого ряда факторов: ваша инфраструктура, политики безопасности, управление и т.д.

Мы разрабатываем наши услуги (WSDL, и сообщения контрактов) и XML-схемы (контракты данных), а затем использовать svcutil.exe * для создания прокси. В этот момент у нас есть код, который мы можем использовать для использования или поддержки службы. Конечно, я просто говорю о коде, output.config будет изменен с помощью правильного поведения, привязок и конечных точек, поскольку они решаются.

После того, как служба была вставлена, она выходит из шлюза XML. С этого момента мы можем начать тестирование сервисов с помощью «Добавить ссылку на службу ...». Если вы просто хотите сэкономить время и передать кому-то еще свой предварительно сгенерированный прокси-сервер или ваши WSDL-файлы не будут отображаться (поскольку они находятся за шлюзом XML, который не отвечает им), то то, что вы делаете, кажется прекрасным ,

В противном случае я ожидаю, что потребители смогут «Добавить ссылку на службы ...» и создать своих собственных клиентов.

* Приложения на Java используют что-то еще (WSDL2Java/ClientGen/встроенный инструмент IDE).

0

Совместное использование предварительно упакованных интерфейсов обслуживания вместе с datacontracts не противоречит принципам SOA, поскольку не предполагается использовать сервисы потребления. Именно это позволяет потенциальным клиентам ускорить разработку против существующего стороннего сервиса или начать разработку против того, который еще предстоит построить. Предоставление интерфейсов/datacontracts в формате кода будет менее двусмысленным, чем описание этих вещей только с помощью документации (конечно, они могут оказаться нецелесообразными, если клиент использует другой язык программирования).

Однако, если в общем пакете предоставляется какая-либо предварительно упакованная реализация интерфейса службы, и эта реализация должна использоваться для успешного использования службы, то это будет противоречить принципам SOA, если только реализация не была написанный для всех типов клиентов. Однако, будучи прагматичным, это может быть хорошей идеей, поэтому клиенты могут быть более слабо связаны с такими вещами, как выбор транспорта, изменения контракта на обслуживание и обслуживание версий.

Я бы порекомендовал использовать ChannelFactory (конечно, из клиента dotnet), независимо от того, потребляете ли вы службы через общие предварительно упакованные интерфейсы/datacontracts проект или dll или генерируете свой собственный прокси (через «Добавить служебную ссылку» или «svcutil .Exe'). Это позволит вам кодировать интерфейс службы и, следовательно, ваш клиент будет гораздо более дружелюбен к использованию таких понятий, как инъекция зависимостей для stubbing, тестирования и т. Д.

0

Оба метода генерации прокси-сервера действительны, это зависит от того, как большой контроль, который вы хотите иметь над прокси-сервером, и если у вас есть обе стороны кода. Третий вариант также существует, вы можете использовать собственный прокси-сервер. Позвольте мне пояснить далее:

В SOA мы передаем сообщения, это другая парадигма для передачи указателей на объекты в куче/стек, который является нормой в мире OO.

Таким образом, в SOA договор (то, что вы можете сделать) и сообщение (государство действовать) имеют важное значение и должны быть разделены с потребителями услуги, чтобы все могли договориться о договоре или «правилах» участия "здесь мы имеем самую основную форму SOA.

Введите WS- * набор спецификаций для добавления дополнительных функциональных возможностей для нашего сервисного вызова (распределенные транзакции, безопасность и т. Д.), Но если мы это сделаем, нам всем необходимо согласовать правила и аромат типа которое мы намерены использовать, поэтому службе и ее клиентам необходимо точно договориться о том, как это должно произойти, чтобы оно было общим.

Сочетание определений контрактов и спецификаций WS- * называется WSDL, и это, как правило, то, что разделяется между клиентами и службами, это согласуется с арендаторами SOA, которыми мы разделяем схему и контракт, а не класс и что совместимость основана на политике (WS- *).

Итак, если вы используете фабрику каналов, вы создаете прокси-сервер на основе определения интерфейса и конфигурации, которую вы установили «на лету», если вы используете ссылку на службу поддержки, вы позволяете IDE генерировать прокси-класс на основе WSDL службы, поскольку она существует тогда.

Если вы создадите прокси-сервер, у вас есть полный контроль над тем, как это происходит, и вы можете перейти в цепочку перехвата и сделать что-то на стороне клиента, чтобы манипулировать вызовом.

В зависимости от того, что вы хотите сделать.

0

Стандарты, которые мы тщательно рассмотрели и приняли в моей компании, заключаются в том, что мы распространяем контракты на обслуживание двумя способами. Как совместная сборка при доставке командам внутри компании и в качестве WSDL при предоставлении клиентам и другим третьим лицам. Это стандарт, который мы обсуждали с Microsoft во время анализа дизайна/процесса, и они согласились, что это правильный подход.

Смежные вопросы