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

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

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

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

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

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

Ответ 1

Хорошо, здесь мы идем. Во-первых, книга Michele Leroux Bustamante была обновлена ​​для VS2008. Веб-сайт для книги не исчез. Это прямо сейчас, и у этого есть тонны большой информации WCF. На этом веб-сайте она предлагает обновленный код, совместимый с VS2008, для всех примеров в ее книге. Если вы заказываете у Amazon, вы получите обновленную перепечатку.

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

}

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

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

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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
  • Фонд как служба WCF. Приложение Silverlight для опроса
  • для последних каналов данных.

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

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

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

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

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

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

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