WCF: WTF! WCF поднимает планку или только уровень сложности?


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

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

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

кроме того, состояние книг, доступных для WCF, в лучшем случае является ужасным. Juval Lowy, превосходный автор, написал хороший справочник O'Reilly "Программирование служб WCF", но он не делает так много (для меня в любом случае) для обучения теперь использовать WCF. Предшественник этой книги (и немного лучше организованный, но не намного, как учебник) - это обучение Мишеля Леру Бустаманте ФОС. Он имеет хорошие места, но устарел на месте, и его соответствующий веб-сайт исчез.

У вас есть хорошие ссылки на обучение WCF, кроме того, что вы просто продолжаете Google bejebus из вещей?

спасибо, РП

16 84

16 ответов:

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

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

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

Я обычно использую 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 Remoting, потому что это реальная вещь его замена. .Система удаленного взаимодействия. net-это довольно сложная сама по себе. Я считаю, что WCF проще и лучше выложен.

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

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

}

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

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

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

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

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

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

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

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

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, Self-hosting, управляемая служба Windows.

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

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

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

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

  • Ориентация Службы
  • совместимость
  • несколько Шаблоны Сообщений
  • Сервис Метаданных
  • Данных Договоров
  • безопасность
  • несколько транспортов и кодировок
  • надежные и поставленные в очередь сообщения
  • Прочная Сообщения
  • сделки
  • поддержка AJAX и REST
  • расширения

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

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

с точки зрения того, что он предлагает, я думаю, что ответ-совместимость. Услуги ASMX были довольно Microsofty. Не сказать, что они не пытались быть совместимыми с другими потребителями; но модель не была сделана, чтобы соответствовать много кроме того 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 клиента подключаться к службе, пока вы не измените много конфигурации. Изменение конфигурации из кода нелегко, доставка большого количества файлов comfig не является опцией, так как слишком сложно объединить наши изменения в любые изменения, которые может сделать клиент сделали во время обновления (Также мы не хотим, чтобы клиенты играли с настройками WCF!)

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

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

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