Повышает ли WCF планку или просто уровень сложности?

StackOverflow https://stackoverflow.com/questions/50114

  •  09-06-2019
  •  | 
  •  

Вопрос

Я понимаю ценность трехкомпонентной модели service / host / client, предлагаемой WCF.Но мне только кажется, или кажется, что WCF взяла что-то довольно прямое и прямолинейное (модель ASMX) и устроила из этого беспорядок?

Есть ли альтернатива использованию командной строки SvcUtil для создания прокси-сервера?С помощью сервисов ASMX тестовый жгут был предоставлен автоматически;есть ли сегодня хорошая альтернатива WCF?

Я ценю, что материал WS * более тесно интегрирован с WCF, и надеюсь найти там какую-то отдачу для WCF, но, черт возьми, в противном случае я в замешательстве.

Кроме того, состояние книг, доступных для WCF, в лучшем случае плачевное.Ювал Лоуи, превосходный автор, написал хороший справочник О'Рейли "Программирование служб WCF", но он не так уж много делает (по крайней мере, для меня) для того, чтобы научиться использовать WCF.Предшественником этой книги (и немного лучше организованной, но ненамного, в качестве учебного пособия) является книга Мишеля Леру Бустаманте Learning WCF .В нем есть хорошие места, но он устарел, а соответствующий веб-сайт исчез.

У вас есть хорошие рекомендации по обучению WCF, помимо того, что вы просто продолжаете гуглить bejebus out of things?

Это было полезно?

Решение

Ладно, поехали.Во-первых, книга Мишель Леру Бустаманте была обновлена для VS2008.Веб-сайт с книгой никуда не делся.Он запущен прямо сейчас, и в нем есть масса отличной информации по WCF.На этом веб-сайте она предоставляет обновленный код, совместимый с VS2008, для всех примеров в своей книге.Если вы сделаете заказ на Amazon, вы получите обновленную версию.

WCF не является Только замена ASMX.Конечно, он может (и делает это довольно хорошо) заменить ASMX, но реальное преимущество заключается в том, что он позволяет вашим сервисам размещаться самостоятельно.Большая часть функциональности WSE была реализована с самого начала.Основой является весьма настраиваемый, и возможность обслуживать несколько конечных точек по нескольким протоколам потрясающая, IMO.

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

У Мишель есть масса отличных материалов, и я рекомендую вам заглянуть на ее веб-сайты.Вот несколько ссылок, которые были невероятно полезны для меня, когда я изучал WCF.Я надеюсь, что вы придете к пониманию того, насколько на самом деле силен WCF и насколько легко его реализовать.Кривая обучения немного крутовата, но вознаграждение за потраченное вами время того стоит:

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

Другие советы

Обычно я использую Google, чтобы найти свои ответы на WCF, и обычно нахожу себя в следующих блогах:

Блоги с ценными статьями WCF

Другие ценные статьи, которые я нашел

Мне трудно понять, когда я должен или буду использовать WCF.Почему?Потому что я ставлю производительность и простоту на первое место в своем списке.Почему модель ASMX оказалась такой успешной, потому что она работала, и вы заставляете ее работать быстро.А с VS 2005 и .NET 2.0 wsdl.exe были выпущены довольно приятные и совместимые сервисы.

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

WCF намного мощнее, чем ASMX, и расширяет его несколькими способами.ASMX ограничен только HTTP, тогда как WCF может использовать несколько протоколов для своей связи (конечно, HTTP по-прежнему является способом, которым большинство людей будут его использовать, по крайней мере, для служб, которые должны быть совместимы).WCF также легче расширить.По крайней мере, его можно расширить таким образом, что ASMX не может быть расширен."Легко" может означать растягивание.=)

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

Подожди....вы когда-нибудь пользовались .Сетевое удаленное управление, потому что это реальная вещь, которая его заменяет.Удаленное управление .NET само по себе довольно сложно.Я нахожу WCF более простым и продуманным.

Я не вижу, чтобы об этом упоминали достаточно часто, но вы может все еще реализуйте довольно простые сервисы с помощью WCF, очень похожие на ASMX services.Например:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

Вам все равно придется зарегистрировать конечную точку в вашем web.config, но это не так уж плохо.

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

VS2008 включает в себя пункт контекстного меню "Добавить ссылку на службу", который создаст прокси для вас за кулисами.

Как упоминалось ранее, WCF предназначен не только для замены типов веб-служб ASMX, но и для обеспечения согласованной, безопасной и масштабируемой методологии для всех совместимых служб, будь то через HTTP, tcp, именованные каналы или MSMQ transports.

Я признаюсь, что у меня действительно есть другие проблемы с WCF (напримерпереписывание сигнатур методов при предоставлении сервиса через basicHttp - см. здесь, но в целом я думаю, что это определенное улучшение

Если вы используете VS2008 и создаете проект WCF, то вы автоматически получаете тестовый жгут, когда нажимаете run / debug, и вы можете добавить ссылку без необходимости использовать svcutil.

Мои первоначальные мысли о WCF были точно такими же!Вот несколько решений:

  1. Запрограммируйте свой собственный уровень прокси / клиента, используя общие компоненты (см. Классы Клиентская база, Обязательный).Я обнаружил, что с этим легко начать работать, но трудно довести до совершенства.
  2. Используйте стороннюю реализацию 1 (Обработка программного обеспечения это мое нынешнее любимое блюдо)

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

"Веб-службы" WCF являются частью гораздо более широкого спектра удаленной связи, обеспечиваемой с помощью WCF.Вы получите гораздо более высокую степень гибкости и переносимости при выполнении операций в WCF, чем с помощью традиционного ASMX, потому что WCF изначально разработан для обобщения всех различных инфраструктур распределенного программирования, предлагаемых Microsoft.С конечной точкой в WCF можно обмениваться данными так же легко по SOAP / XML, как и по TCP / binary, и изменить этот носитель можно просто с помощью изменения файла конфигурации.Теоретически, это уменьшает объем нового кода, необходимого при переносе или изменении бизнес-потребностей, целей и т.д.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more).По сути, вы можете рассматривать WCF как попытку логически сгруппировать все различные способы взаимодействия двух приложений в мире Microsoft;ASMX был лишь одним из этих многих способов и поэтому теперь сгруппирован под эгидой возможностей WCF.

Доступ к веб-сервисам возможен только по протоколу HTTP и работает в среде без состояния, где WCF является гибким, поскольку его сервисы могут размещаться в различных типах приложений.Распространенными сценариями размещения служб WCF являются IIS, WAS, Самостоятельный хостинг, Управляемая служба Windows.

Основное отличие заключается в том, что веб-сервисы используют XmlSerializer.Но WCF использует DataContractSerializer, который обладает лучшей производительностью по сравнению с XmlSerializer.

В каких сценариях необходимо использовать WCF

  • Безопасный сервис для обработки бизнес-транзакций.Услуга, которая
  • предоставляет текущие данные другим пользователям, например отчет о дорожном движении или другие
  • служба мониторинга.Служба чата, которая позволяет двум людям общаться
  • общайтесь или обменивайтесь данными в режиме реального времени.Приложение информационной панели
  • который запрашивает данные у одной или нескольких служб и представляет их в логическом виде.
  • презентация.Представление рабочего процесса, реализованного с помощью Windows Workflow
  • Foundation как служба WCF.Приложение Silverlight для опроса
  • сервис для получения последних потоков данных.

Особенности WCF

  • Ориентация на обслуживание
  • Функциональная совместимость
  • Несколько шаблонов сообщений
  • Служебные метаданные
  • Контракты с данными
  • Безопасность
  • Несколько видов транспорта и кодировок
  • Надежные сообщения и сообщения, помещенные в очередь
  • Долговечные Сообщения
  • Транзакции
  • Поддержка AJAX и REST
  • Расширяемость

Источник: основной источник текста

MSDN?Обычно я довольно хорошо справляюсь с самим справочником по библиотеке и обычно ожидаю найти там ценные статьи.

С точки зрения того, что он предлагает, я думаю, что ответ - это совместимость.Сервисы ASMX были довольно мелкими.Нельзя сказать, что они не старались быть совместимыми с другими потребителями;но модель была создана не для того, чтобы соответствовать многим требованиям, кроме ASP.NET веб-страниц и некоторых других пользовательских приложений Microsoft.Принимая во внимание, что WCF, благодаря своей архитектуре, позволяет вашему сервису иметь конечные точки на основе очень открытых стандартов, напримерREST, JSON и т.д.в дополнение к обычному МЫЛУ.Другим людям, вероятно, будет гораздо проще отнимать время у вашего сервиса WCF, чем у вашего ASMX.

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

WCF не следует рассматривать как замену ASMX.Судя по тому, как он позиционируется и как используется внутри Microsoft, это действительно фундаментальный элемент архитектуры, который используется для любого типа трансграничного взаимодействия.

Я считаю, что WCF действительно продвигает реализацию веб-служб ASMX во многих отношениях.Прежде всего, он предоставляет очень красивую многоуровневую объектную модель, которая помогает скрыть внутреннюю сложность распределенных приложений.Во-вторых, у вас может быть больше шаблонов обмена сообщениями с повторным запросом, включая асинхронные уведомления от сервера к клиенту (невозможно с чистым HTTP), и, в-третьих, абстрагирование базового транспортного протокола от обмена сообщениями XML и, таким образом, элегантная поддержка HTTP, HTTPS, TCP и других.Обратная совместимость с веб-сервисами "1-го поколения" также является плюсом.WCF использует стандарт XML в качестве внутреннего формата представления.Это может быть воспринято как преимущество или недостаток, особенно с учетом растущей популярности "обезжиренных альтернатив XML", таких как JSON.

Самое сложное, что я нахожу в WCF, - это управление конфигурациями для клиентов и серверов и устранение неполадок в не очень приятных исключениях с ошибочным состоянием.

Было бы здорово, если бы у кого-нибудь были какие-нибудь ярлыки или советы для них.

Я нахожу, что это причиняет боль;поскольку у меня есть .NET на обоих концах, у меня есть одинаковые "контрактные" библиотеки DLL, загруженные на обоих концах и т.д.Но тогда мне приходится возиться с множеством деталей, таких как атрибуты "KnownType".

WCF также по умолчанию разрешает подключаться к службе только 1 или 2 клиентам, пока вы не измените большую часть конфигурации.Изменить конфигурацию из code непросто, отправка большого количества файлов comfig невозможна, так как слишком сложно объединить наши изменения с любыми изменениями, которые клиент мог внести во время обновления (также мы не хотим, чтобы клиенты играли с настройками WCF!)

Удаленное взаимодействие .NET, как правило, просто работало большую часть времени.

Я думаю, что пытаюсь притворяться это .Обмен данными между сетевыми объектами .Обмен данными на основе сетевых объектов - это то же самое, что отправка бита so текста (xml) в неизвестную систему, это был слишком большой шаг.

(Несколько раз, когда мы использовали WCF для взаимодействия с системой Java, мы обнаруживали, что XSD, выдаваемый системой Java, в любом случае не соответствовал тому XML, который она хотела, поэтому приходилось вручную кодировать множество сопоставлений XML.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top