Поднимает ли WCF планку или просто уровень сложности? [закрыто]


84

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

Есть ли альтернатива использованию шага назад во времени в командной строке SvcUtil для создания прокси? Для сервисов ASMX автоматически предоставлялась тестовая оснастка; есть ли сегодня хорошая альтернатива WCF?

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

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

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


3
Если вы ищете хорошего тестового клиента для служб WCF. Не смотрите дальше, чем msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok

Ответы:


61

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

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

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

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

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


3
Отличные ресурсы. Я бы не стал говорить, что rp критиковал WCF или авторов. Я тоже чувствовал себя немного ошеломленным, пытаясь взглянуть на WCF после того, как провел так много времени в ASMX. Я знаю, что это лучше, и я хочу испытать это, но трудно найти точку входа, такую ​​как вы могли бы с ASMX.
Крис Стюарт,

15

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

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

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


Спасибо за ссылки. Просто любопытно, знаете ли вы, что случилось с Буддике? Кажется, он исчез с лица земли. Новый блог, который он упоминает на blogs.thinktecture.com/buddhike , не существует (больше). Как будто он сбился с этой смертельной катушки. (Какие сны могут прийти?) Спасибо.
Джим Раден


14

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

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


WCF стремится быть единой структурой для всех этих протоколов. Он поддерживает протоколы SOAP, REST и WSCF Adapter SDK, а также выполняет эти «устаревшие системные» подключения, все в рамках модели WCF.
Cheeso

3
Это зависит от того, как вы измеряете «продуктивность». Я бы предпочел, чтобы разработчик потратил 2–3 дня на то, чтобы разобраться в этом сейчас, потому что преимущества говорят через 6 месяцев. WCF заменяет не только веб-сервисы.
Christian Payne

1
Согласен на 100%. Если вам просто нужны веб-сервисы, и вам нужно быстро их доставить (а кто нет?), То это ASMX, детка! WCF - это гигантская кувалда - полный перебор, если вам нужны только базовые веб-службы. Просто потому, что это блестящая новинка, не означает, что вы должны всегда предполагать, что она лучше во всех отношениях для всех сценариев. И то, что WCF сложно понять, не делает вас умным человеком для его выбора. Больше возможностей для тех, у кого хватит смелости отказаться присоединиться к победителям WCF!
saille

13

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

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


6

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


4

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

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

}

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

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


AspNetCompatibilityRequirements - необходимое зло, если многие разработчики собираются отказаться от своих служб ASMX, которые в настоящее время работают нормально.
Дэйв Уорд,

@dan, почему не AspNetCompatibilityRequirements ?
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements - необходимое зло ?
PreguntonCojoneroCabrón

4

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

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

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


3

Если вы используете VS2008 и создаете проект WCF, вы автоматически получаете тестовую систему, когда нажимаете «запустить / отладка», и вы можете добавить ссылку без использования svcutil.


2

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

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

2

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

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

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
  • Расширяемость

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


Теперь использовать WCF или REST? или WebAPI? или MicroService?
PreguntonCojoneroCabrón

1

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


1

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

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


У меня не было проблем с кроссплатформенными службами ASMX - XML ​​там неплохо справляется. Я понимаю, что WCF = удаленное взаимодействие + ASMX + MSMQ + WSE. Я считаю, что MS следует использовать небольшое «прогрессивное улучшение», чтобы сделать WCF более доступным, и мой вопрос - как! Спасибо, рп
рп.

Взаимодействие ASMX было очень хорошим, хотя усилия были увеличены, когда был задействован WS-Security.
Cheeso

1

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


да ... и как фундаментальная среда связи он должен заменить веб-сервисы, ориентированные на ASMX и ASP.NET. Нет?
Cheeso

1

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


1

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

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


1

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

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

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

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

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


Я думаю, что люди не совсем правы, когда говорят, что WCF заменяет удаленное взаимодействие. Удаленное взаимодействие по-прежнему является прекрасным вариантом, когда вы хотите выполнять реальные объектно-ориентированные вызовы из .Net в .Net и иметь достаточный контроль над тем, как все настроено на обоих концах. WCF, с другой стороны, ориентирован на публикацию Сервисов для всех, кто может их использовать, любым способом.
Тим Ловелл-Смит,

@Tim, Microsoft теперь говорит использовать WCF для всего, и что это замена для удаленного взаимодействия. Удаленное взаимодействие кажется забытым дитем мира .net.
Ian Ringrose
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.