Новые возможности в Windows Communication Foundation 4.5

В этом разделе рассматриваются новые возможности Windows Communication Foundation (WCF) версии 4.5.

gRPC в качестве альтернативы WCF

gRPC — это современная платформа RPC, которая является популярной альтернативой WCF. gRPC построен на основе HTTP/2, что обеспечивает ряд преимуществ по сравнению с WCF, в том числе:

  • Производительность: gRPC гораздо эффективнее, чем WCF, особенно для длительных подключений.
  • Масштабируемость: gRPC предназначен для масштабирования до большого количества клиентов и серверов.
  • Безопасность: gRPC поддерживает различные механизмы безопасности, включая TLS и проверку подлинности.
  • Кроссплатформенный: gRPC является платформо-нейтральным и может использоваться с различными языками программирования.

Дополнительные сведения о разработке или переносе приложений WCF в gRPC см. в следующем разделе:

Возможности упрощения WCF

Много работы было посвящено тому, чтобы сделать разработку и поддержку приложений WCF 4.5 более легкой. Дополнительные сведения см. в разделе "Функции упрощения WCF".

Поддержка асинхронного выполнения задач

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

Упрощенные сформированные файлы конфигурации

Клиентский файл конфигурации создается при добавлении ссылки на службу в Visual Studio или при использовании средства SvcUtil.exe. В предыдущих версиях WCF эти файлы конфигурации содержали значения каждого свойства привязки, даже если значение было значением по умолчанию. В WCF 4.5 сформированные файлы конфигурации содержат только те свойства привязки, которым присвоено значение не по умолчанию.

Дополнительные сведения см. в разделе "Функции упрощения WCF".

Разработка в соответствии с парадигмой «Сначала контракт»

WCF теперь поддерживает разработку в соответствии с парадигмой «Сначала контракт». Svcutil.exe имеет переключатель /serviceContract, который позволяет создавать контракты службы и данных из документа WSDL.

Добавление ссылки на службу из проекта переносимого подмножества

Переносимые проекты подмножества позволяют программистам сборки .NET поддерживать одно исходное дерево и систему сборки, сохраняя поддержку нескольких платформ .NET (классических, Silverlight, Windows Телефон и Xbox). Переносимые проекты подмножества ссылаются только на переносимые библиотеки .NET, которые являются сборками, которые можно использовать на любой платформе .NET. Процесс добавления такой же, как и при добавлении ссылки на службу в рамках любого другого клиентского приложения WCF. Дополнительные сведения см. в разделе "Добавление ссылки на службу" в проекте переносимого подмножества.

Изменились значения по умолчанию для режима совместимости с ASP.NET

WCF предоставляет режим совместимости с ASP.NET, дающий разработчикам при создании служб WCF полный доступ к функциям HTTP-конвейера ASP.NET. Чтобы использовать этот режим, необходимо задать для атрибута aspNetCompatibilityEnabled значение true в <разделе serviceHostingEnvironment> web.config. Кроме того, любая служба в этом домене приложения должна иметь RequirementsMode свойство в его AspNetCompatibilityRequirementsAttribute наборе Allowed или Required. По умолчанию AspNetCompatibilityRequirementsAttribute задано значение Allowed. Дополнительные сведения см. в разделе "Службы WCF" и ASP.NET.

Новые значения по умолчанию для свойств транспорта

Для упрощения настройки были изменены несколько значений по умолчанию для свойств транспорта. Дополнительные сведения см. в разделе "Функции упрощения WCF".

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas содержит настраиваемые значения квот для средств чтения словаря XML, которые ограничивают объем памяти, используемый кодировщиком при создании сообщения. Хотя эти квоты и можно изменить, значения по умолчанию были изменены для уменьшения вероятности явной настройки разработчиками этих данных. Дополнительные сведения см. в разделе "Функции упрощения WCF".

Проверка конфигурации WCF

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

Подсказки в редакторе XML

В XML-редакторе Visual Studio отображаются подсказки для каждого элемента конфигурации (и его свойств), входящего в файл конфигурации службы. Это облегчает работу разработчиков по конфигурации WCF-служб.

Улучшения в потоковой передаче данных

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

Упрощено предоставление доступа к конечной точке по протоколу HTTPS в службах IIS

Было добавлено сопоставление протокола HTTPS для упрощения предоставления доступа к конечной точке по протоколу HTTPS. Чтобы включить конечную точку HTTPS, убедитесь, что веб-сайт имеет привязку HTTPS и настроенный SSL-сертификат, а затем просто включите HTTPS для виртуального каталога, в котором размещается служба. Если для службы включены метаданные, то доступ к ней будет также предоставлен по протоколу HTTPS.

Создание одного документа WSDL

Некоторые стеки обработки WSDL от сторонних производителей не могут обрабатывать документы WSDL, которые имеют зависимости от других документов посредством xsd:import. WCF теперь позволяет указывать, что все данные WSDL должны быть возвращены в одном документе. Чтобы запросить один документ WSDL, добавьте "?singleWSDL" в универсальный код ресурса (URI) при запросе метаданных из службы.

Поддержка WebSocket

WebSockets - это технология, которая обеспечивает истинный двусторонний обмен сообщениями по портам 80 и 443, имеющий характеристики производительности, схожие с протоколом TCP. Были добавлены две привязки для поддержки обмена данными через транспорт WebSocket. NetHttpBinding и NetHttpsBinding. Дополнительные сведения см. в статье " Предоставленные системой привязки".

Новые значения по умолчанию для свойств транспорта

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

Свойство Вкл Новое значение по умолчанию Дополнительные сведения см. в разделе
channelInitializationTimeout NetTcpBinding 30 секунд ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * количество процессоров ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * количество процессоров для транспорта

4 * число процессоров для SMSvcHost.exe
MaxPendingAcceptsНастройка службы совместного использования портов Net.TCP
maxPendingConnections ConnectionOrientedTransportBindingElement 12 * количество процессоров MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 секунд Настройка службы совместного использования портов Net.TCP

Настройка служб WCF в коде

Windows Communication Foundation (WCF) позволяет разработчикам настраивать службы с помощью файлов конфигурации или кода. Файлы конфигурации используются, если необходимо настроить службу после ее развертывания. При использовании файлов конфигурации ИТ-работнику требуется только обновить файл конфигурации без необходимости выполнять повторную компиляцию. Файлы конфигурации, однако, могут быть сложными и требовать больших усилий при обслуживании. Отсутствует поддержка отладки файлов конфигурации, и ссылки на элементы конфигурации осуществляются по именам, что усложняет работу и способствует совершению ошибок при создании файлов конфигурации. WCF также позволяет настраивать службы в коде. В более ранних версиях WCF (4.0 и более ранних версий) настройка служб в коде была легкой в локальном сценарии, ServiceHost класс позволил настроить конечные точки и поведение до вызова ServiceHost.Open. Однако в сценариях с размещением в Интернете нет прямого доступа к классу ServiceHost. Чтобы настроить службу, размещенную в сети, приходилось создавать класс System.ServiceModel.ServiceHostFactory, который создавал ServiceHostFactory и выполнял необходимые настройки. Начиная с версии платформа .NET Framework 4.5 WCF предоставляет более простой способ настройки как размещенных, так и размещенных в интернете служб в коде. Дополнительные сведения см. в разделе "Настройка служб WCF в коде".

Кэширование ChannelFactory

Клиентские приложения WCF используют класс ChannelFactory<TChannel> для создания коммуникационного канала со службой WCF. Создание экземпляров класса ChannelFactory<TChannel> оказывает определенное влияние на производительность, поскольку выполняются следующие операции:

  1. Построение дерева ContractDescription

  2. Отображение всех необходимых типов CLR

  3. Построение стека каналов

  4. Освобождение ресурсов

Чтобы уменьшить дополнительные расходы ресурсов, WCF может кэшировать фабрики каналов при использовании прокси клиента WCF. Дополнительные сведения см. в разделе "Фабрика каналов" и кэширование.

Сжатие и двоичный кодировщик

Начиная с версии WCF 4.5, в двоичном кодировщике появилась поддержка сжатия. Тип сжатия задается с помощью свойства CompressionFormat. Свойство CompressionFormat должно быть задано и в клиенте и в службе. Сжатие будет работать для протоколов HTTP, HTTPS и TCP. Если клиент указывает использование сжатия, но служба его не поддерживает, возникает исключение протокола, указывающее на несоответствие. Дополнительные сведения см. в разделе "Выбор кодировщика сообщений".

UDP

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

Поддержка нескольких видов проверок подлинности

Была добавлена поддержка нескольких режимов проверок подлинности, поддерживаемых службами IIS, в одной конечной точке WCF при использовании транспорта HTTP и безопасности транспорта. Служба IIS позволяет включить несколько режимов проверки подлинности в виртуальном каталоге. Эта возможность позволяет одной конечной точке WCF поддерживать несколько режимов проверки подлинности, разрешенных для виртуального каталога, в котором размещена служба WCF.

Поддержка IDN

Добавлена поддержка служб WCF с интернационализированными именами домена (IDN). Дополнительные сведения см. в разделе WCF и международных доменных имен.

HttpClient

Был добавлен новый класс HttpClient, существенного облегчающий работу с HTTP-запросами. Дополнительные сведения см. в разделе HttpClient " Рекомендации по использованию HttpClient".

Настройка IntelliSense

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

Всплывающие подсказки в файлах конфигурации

Элементы и атрибуты WCF теперь имеют подсказки в редакторе XML, чтобы упростить и точно определить назначение элемента или атрибута.

Вставка данных в виде классов

В проекте WCF типы данных, определенные в XML (например, предоставленные как служба), могут быть вставлены непосредственно в кодовую страницу. XML-тип будет вставлен как тип CLR. Дополнительные сведения см. в разделе "Создание классов типов данных из XML ".

WebServiceHost и конечные точки по умолчанию.

В Visual Studio 2010 WebServiceHost автоматически создавал конечную точку по умолчанию независимо от того, была она явно указана или нет. В Visual Studio 2012 и более поздних версиях WebServiceHost создает только конечную точку по умолчанию, если конечные точки не добавляются явным образом. Если клиент ожидает конечную точку по умолчанию, можно явно добавить конечную точку и указать клиенту его. Кроме того, можно вернуть прежнее поведение WCF, добавив следующий параметр в файл конфигурации приложения.

<appSettings>
    <add key="wcf:webservicehost:enableautomaticendpointscompatability" value="true"/>
  </appSettings>

IHttpCookieContainerManager

Этот интерфейс, предоставляемый IChannelFactory<TChannel>, существенно упрощает работу с куки-файлами на стороне клиента. Когда свойство AllowCookies имеет значение true для привязки, доступ к куки-файлам можно получить следующим образом:

IHttpCookieContainerManager cookieManager = factory.GetProperty<IHttpCookieContainerManager>();
System.Net.CookieContainer container = cookieManager.CookieContainer;

Затем можно получать или устанавливать куки-файлы из CookieContainer. Когда свойство AllowCookies имеет значение false, куки-файл можно получить вручную с помощью OperationContext и отправить его запросом с помощью другого OperationContext или средства проверки сообщений. Интерфейс IHttpCookieContainerManager позволяет выполнить проверку подлинности пользователя для службы и использовать куки-файл, возвращенный службой, для проверки подлинности в других службах.