WCF ChannelFactory по сравнению с генерацией прокси

В Вашем make-файле:

target:
    if test -d dir; then echo "hello world!"; else mkdir dir; fi
81
задан SteveC 10 October 2014 в 10:02
поделиться

3 ответа

Существует 3 основных способа создания клиента WCF:

  1. Разрешить Visual Studio сгенерировать ваш прокси. Это автоматически генерирует код, который подключается к службе путем чтения WSDL. Если услуга изменится по какой-либо причине, вам необходимо восстановить ее. Большим преимуществом этого является то, что его легко настроить - VS имеет мастер, и все это происходит автоматически. Недостатком является то, что вы полагаетесь на VS, чтобы сделать всю тяжелую работу за вас, и поэтому вы теряете контроль.

  2. Используйте ChannelFactory с известным интерфейсом. Это зависит от наличия у вас локальных интерфейсов, описывающих службу (контракт службы). Большим преимуществом является то, что управлять изменениями гораздо проще - вам все равно придется перекомпилировать и исправить изменения, но теперь вы не регенерируете код, а ссылаетесь на новые интерфейсы. Обычно это используется, когда вы управляете как сервером, так и клиентом, поскольку их гораздо легче смоделировать для модульного тестирования. Однако интерфейсы могут быть написаны для любого сервиса, даже для REST - взгляните на этот Twitter API .

  3. Напишите свой собственный прокси - это довольно просто сделать, особенно для служб REST, с помощью HttpClient или WebClient . Это дает вам наиболее точный контроль зернистости, но за счет того, что множество служебных API находится в строках. Например: var content = new HttpClient (). Get ("http://yoursite.com/resource/id") .Content; - при изменении деталей API вы не встретите ошибка до времени выполнения.

Лично мне никогда не нравился вариант 1 - полагаться на автоматически сгенерированный код беспорядочно и теряется слишком много контроля.Кроме того, это часто создает проблемы с сериализацией - я получаю два идентичных класса (один в коде сервера, один автоматически сгенерированный), которые можно улучшить, но это боль.

Вариант 2 должен быть идеальным, но каналы слишком ограничивают - например, они полностью теряют содержание ошибок HTTP . При этом, имея интерфейсы, описывающие сервис, гораздо проще кодировать и поддерживать.

86
ответ дан 24 November 2019 в 09:39
поделиться

Итак, чтобы использовать ChannelFactory , вы должны быть готовы разделять сборки контрактов между службой и клиентом. Если вас это устраивает, то ChannelFactory может сэкономить вам время.

11
ответ дан 24 November 2019 в 09:39
поделиться

Прокси-сервер будет создавать асинхронные функции, что довольно удобно.

9
ответ дан 24 November 2019 в 09:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: