WCF ChannelFactory против принципов SOA? - PullRequest
3 голосов
/ 29 апреля 2010

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

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

Ответы [ 4 ]

0 голосов
/ 26 ноября 2010

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

0 голосов
/ 30 апреля 2010

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

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

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

0 голосов
/ 03 ноября 2010

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

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

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

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

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

Таким образом, если вы используете фабрику каналов, вы генерируете прокси на основе имеющегося у вас определения интерфейса и конфигурации, которую вы настроили на лету, если вы используете add service reference, вы позволяете IDE генерировать прокси-класс на основе WSDL сервис, как он существует тогда.

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

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

0 голосов
/ 29 апреля 2010

Полагаю, это зависит от некоторых вещей: вашей инфраструктуры, политик безопасности, управления и т. Д.

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

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

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

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

...