Новые возможности в Windows Communication Foundation 4.5What's New in Windows Communication Foundation 4.5

В этом разделе рассматриваются функции нового в Windows Communication Foundation (WCF) версии 4.5.This topic discusses features new to Windows Communication Foundation (WCF) version 4.5.

Возможности упрощения WCFWCF Simplification Features

Много работы было посвящено тому, чтобы сделать разработку и поддержку приложений WCF 4.5 более легкой.Much work has been done to make WCF 4.5 applications easier to develop and maintain. Дополнительные сведения см. в разделе возможности упрощения WCF.For more information, see WCF Simplification Features.

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

По умолчанию команда добавления ссылки на службу формирует методы асинхронных операций службы, возвращающие объекты задач.By default, Add Service Reference generates Task-returning async service operation methods. Это выполняется как для синхронных, так и для асинхронных методов.This is done for both synchronous and asynchronous methods. Это позволяет вызывать операции службы асинхронно, используя новую модель асинхронного программирования на основе задач.This allows you to call the service operations asynchronously using the new Task based async programming model. При вызове сформированного прокси-метода WCF создает объект задачи, представляющий асинхронную операцию, и возвращает ее.When you call the generated proxy method, WCF constructs a Task object to represent the asynchronous operation and returns that Task to you. Задача завершается при завершении операции.The Task completes when the operation completes. При реализации асинхронной операции можно реализовать его как на основе задач асинхронной операции.When implementing an async operation you can implement it as a task-based async operation. Дополнительные сведения см. синхронные и асинхронные операции.For more information see, Synchronous and Asynchronous Operations.

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

Клиентский файл конфигурации создается при добавлении ссылки на службу в Visual Studio или при использовании средства SvcUtil.exe.When you add a service reference in Visual Studio or use the SvcUtil.exe tool, a client configuration file is generated. В предыдущих версиях WCF эти файлы конфигурации содержали значения каждого свойства привязки, даже если значение было значением по умолчанию.In previous versions of WCF these configuration files contained the value of every binding property even if its value is the default value. В WCF 4.5 сформированные файлы конфигурации содержат только те свойства привязки, которым присвоено значение не по умолчанию.In WCF 4.5 the generated configuration files contain only those binding properties that are set to a non-default value.

Дополнительные сведения см. в разделе возможности упрощения WCFFor more information, see WCF Simplification Features

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

WCF теперь поддерживает разработку в соответствии с парадигмой «Сначала контракт».WCF now has support for contract-first development. Svcutil.exe имеет переключатель/ServiceContract, который позволяет создавать контракты служб и данных из документа WSDL.The svcutil.exe has a /serviceContract switch which allows you to generate service and data contracts from a WSDL document.

Добавление ссылки на службу из проекта переносимого подмножестваAdd Service Reference from a Portable Subset Project

Проекты переносимого подмножества позволяют программистам, создающим сборки .NET, поддерживать одно дерево исходного кода и создавать сборки, одновременно поддерживая несколько платформ .NET (настольные приложения, Silverlight, Windows Phone и XBOX).Portable subset projects enable .NET assembly programmers to maintain a single source tree and build system while still supporting multiple .NET platforms (desktop, Silverlight, Windows Phone, and XBOX). Проекты переносимого подмножества ссылаться только на переносимые библиотеки .NET, которые являются сборкой .NET framework, который можно использовать на любой платформе .NET.Portable subset projects only reference .NET portable libraries which are a .NET framework assembly that can be used on any .NET platform. Процесс добавления такой же, как и при добавлении ссылки на службу в рамках любого другого клиентского приложения WCF.The developer experience is the same as adding a service reference within any other WCF client application. Дополнительные сведения см. в разделе добавить ссылку на службу в проект переносного подмножества.For more information, see Add Service Reference in a Portable Subset Project.

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

WCF предоставляет режим совместимости с ASP.NET, дающий разработчикам при создании служб WCF полный доступ к функциям HTTP-конвейера ASP.NET.WCF provides ASP.NET compatibility mode to grant developers full access to the features in the ASP.NET HTTP pipeline when writing WCF services. Для использования этого режима необходимо задать aspNetCompatibilityEnabled атрибута в значение true в <serviceHostingEnvironment > разделе файла web.config. Кроме того, у любой службы в данном домене приложения свойство RequirementsMode в ее атрибуте AspNetCompatibilityRequirementsAttribute должно быть задано как значение Allowed или Required.To use this mode, you must set the aspNetCompatibilityEnabled attribute to true in the <serviceHostingEnvironment> section of web.config. Additionally, any service in this appDomain needs to have the RequirementsMode property on its AspNetCompatibilityRequirementsAttribute set to Allowed or Required. По умолчанию AspNetCompatibilityRequirementsAttribute теперь настроен для Allowed.By default AspNetCompatibilityRequirementsAttribute is now set to Allowed. Дополнительные сведения см. в разделе новые возможности в Windows Communication Foundation и службы WCF и ASP.NET.For more information, see What's New in Windows Communication Foundation and WCF Services and ASP.NET.

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

Для упрощения настройки были изменены несколько значений по умолчанию для свойств транспорта.In order to simplify configuration a number of transport property default values have changed. Дополнительные сведения см. в разделе возможности упрощения WCF.For more information, see WCF Simplification Features.

XmlDictionaryReaderQuotasXmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas содержит настраиваемые значения квот для средств чтения словаря XML, которые ограничивают объем памяти, используемый кодировщиком при создании сообщения.XmlDictionaryReaderQuotas contains configurable quota values for XML dictionary readers which limit the amount of memory utilized by an encoder while creating a message. Хотя эти квоты и можно изменить, значения по умолчанию были изменены для уменьшения вероятности явной настройки разработчиками этих данных.While these quotas are configurable, the default values have changed to lessen the possibility that a developer will have to set them explicitly. Дополнительные сведения см. в разделе возможности упрощения WCF.For more information, see WCF Simplification Features.

Проверка конфигурации WCFWCF Configuration Validation

В ходе выполнения процесса сборки в Visual Studio теперь выполняется проверка файлов конфигурации WCF на наличие атрибутов, заданных в проекте.As part of the build process within Visual Studio, WCF configuration files are now validated for attributes defined within the project. Если проверка завершается с ошибкой, то в Visual Studio отображается список ошибок и предупреждений.A list of validation errors or warnings is displayed in Visual Studio if the validation fails.

Подсказки в редакторе XMLXML Editor Tooltips

В XML-редакторе Visual Studio отображаются подсказки для каждого элемента конфигурации (и его свойств), входящего в файл конфигурации службы. Это облегчает работу разработчиков по конфигурации WCF-служб.In order to help new and existing WCF service developers to configure their services, the Visual Studio XML editor now provides tooltips for every configuration element and its properties that is part of the service configuration file.

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

Добавлена поддержка истинной асинхронной потоковой передачи, когда отправляющая сторона не блокирует потоки в случае, если принимающая сторона не считывает или считывает медленно, таким образом увеличивая масштабируемость решений.Added support for true asynchronous streaming where the send side now does not block threads if the receive side is not reading or slow in reading thereby increasing scalability. Снято ограничение буферизации сообщений, когда клиент отправляет потоковое сообщение службе WCF, размещенной на веб-сервере служб IIS.Removed the limitation of message buffering when a client sends a streamed message to an IIS hosted WCF service. Дополнительные сведения см. в разделе возможности упрощения WCF.For more information, see WCF Simplification Features.

Упрощено предоставление доступа к конечной точке по протоколу HTTPS в службах IISSimplifying Exposing an Endpoint Over HTTPS with IIS

Было добавлено сопоставление протокола HTTPS для упрощения предоставления доступа к конечной точке по протоколу HTTPS.An HTTPS protocol mapping has been added to simplify exposing an endpoint over HTTPS. Чтобы включить конечную точку HTTPS, убедитесь, что веб-сайт имеет привязку HTTPS и настроенный SSL-сертификат, а затем просто включите HTTPS для виртуального каталога, в котором размещается служба.To enable an HTTPS endpoint, ensure your website has an HTTPS binding and SSL certificate configured, and then simply enable HTTPS for the virtual directory that hosts the service. Если для службы включены метаданные, то доступ к ней будет также предоставлен по протоколу HTTPS.If metadata is enabled for the service, it will be exposed over HTTPS as well.

Создание одного документа WSDLGenerating a Single WSDL Document

Некоторые стеки обработки WSDL от сторонних производителей не могут обрабатывать документы WSDL, которые имеют зависимости от других документов посредством xsd:import.Some third-party WSDL processing stacks are not able to process WSDL documents that have dependencies on other documents through a xsd:import. WCF теперь позволяет указывать, что все данные WSDL должны быть возвращены в одном документе.WCF now allows you to specify that all WSDL information be returned in a single document. Чтобы запросить один документ WSDL, добавьте «? singleWSDL» к URL-АДРЕСУ при запросе метаданных от службы.To request a single WSDL document append "?singleWSDL" to the URI when requesting metadata from the service.

Поддержка WebSocketWebSocket Support

WebSockets - это технология, которая обеспечивает истинный двусторонний обмен сообщениями по портам 80 и 443, имеющий характеристики производительности, схожие с протоколом TCP.WebSockets is a technology that provides true bidirectional communication over ports 80 and 443 with performance characteristics similar to TCP. Были добавлены две привязки для поддержки обмена данными через транспорт WebSocket.Two new bindings have been added to support communication over a WebSocket transport. NetHttpBinding и NetHttpsBinding.NetHttpBinding and NetHttpsBinding. Дополнительные сведения см. в разделе: Предоставляемые системой привязки.For more information see: System-Provided Bindings.

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

В следующей таблице описываются измененные настройки и разделы, в которых можно найти дополнительные сведения.The following table describes the settings that have changed and where to find additional information.

СвойствоProperty включитьOn Новое значение по умолчаниюNew Default Дополнительные сведения см. в разделахFor more information see
channelInitializationTimeoutchannelInitializationTimeout NetTcpBinding 30 секунд30 seconds ChannelInitializationTimeout
listenBackloglistenBacklog NetTcpBinding 12 * количество процессоров12 * number of processors ListenBacklog
maxPendingAcceptsmaxPendingAccepts ConnectionOrientedTransportBindingElementConnectionOrientedTransportBindingElement

SMSvcHost.exeSMSvcHost.exe
2 * количество процессоров для транспорта2 * number of processors for transport

4 * количество процессоров для SMSvcHost.exe4 * number of processors for SMSvcHost.exe
MaxPendingAccepts Настройка службы совместного использования портов Net.TCPMaxPendingAccepts Configuring the Net.TCP Port Sharing Service
maxPendingConnectionsmaxPendingConnections ConnectionOrientedTransportBindingElementConnectionOrientedTransportBindingElement 12 * количество процессоров12 * number of processors MaxPendingConnections
receiveTimeoutreceiveTimeout SMSvcHost.exeSMSvcHost.exe 30 секунд30 seconds Настройка службы совместного использования портов Net.TCPConfiguring the Net.TCP Port Sharing Service

Подсказки в редакторе XMLXML Editor Tooltips

В XML-редакторе Visual Studio отображаются подсказки для каждого элемента конфигурации (и его свойств), входящего в файл конфигурации службы. Это облегчает работу разработчиков по конфигурации WCF-служб.In order to help new and existing WCF service developers to configure their services, the Visual Studio XML editor now provides tooltips for every configuration element and its properties that is part of the service configuration file.

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

Windows Communication Foundation (WCF) позволяет разработчикам настраивать службы с помощью файлов конфигурации или кода.Windows Communication Foundation (WCF) allows developers to configure services using configuration files or code. Файлы конфигурации используются, если необходимо настроить службу после ее развертывания.Configuration files are useful when a service needs to be configured after being deployed. При использовании файлов конфигурации ИТ-работнику требуется только обновить файл конфигурации без необходимости выполнять повторную компиляцию.When using configuration files, an IT professional only needs to update the configuration file, no recompilation is required. Файлы конфигурации, однако, могут быть сложными и требовать больших усилий при обслуживании.Configuration files, however, can be complex and difficult to maintain. Отсутствует поддержка отладки файлов конфигурации, и ссылки на элементы конфигурации осуществляются по именам, что усложняет работу и способствует совершению ошибок при создании файлов конфигурации.There is no support for debugging configuration files and configuration elements are referenced by names which makes authoring configuration files error-prone and difficult. Кроме того, WCF позволяет настраивать службы в коде.WCF also allows you to configure services in code. В более ранних версиях настройку служб WCF (4.0 и более ранних версий) в коде было просто в резидентных сценариях ServiceHost класс позволял настроить конечные точки и поведение до вызова метода ServiceHost.Open.In earlier versions of WCF (4.0 and earlier) configuring services in code was easy in self-hosted scenarios, the ServiceHost class allowed you to configure endpoints and behaviors prior to calling ServiceHost.Open. Однако в сценариях с размещением в Интернете нет прямого доступа к классу ServiceHost.In web hosted scenarios, however, you don’t have access to the ServiceHost class. Чтобы настроить службу, размещенную в сети, приходилось создавать класс System.ServiceModel.ServiceHostFactory, который создавал ServiceHostFactory и выполнял необходимые настройки.To configure a web hosted service you were required to create a System.ServiceModel.ServiceHostFactory that created the ServiceHostFactory and performed any needed configuration. Начиная с .NET 4.5, WCF предоставляет более простой способ настроить оба с локальным размещением и web размещенные службы в коде.Starting with .NET 4.5, WCF provides an easier way to configure both self-hosted and web hosted services in code. Дополнительные сведения см. в разделе Настройка служб WCF в коде.For more information, see Configuring WCF Services in Code.

Кэширование ChannelFactoryChannelFactory Caching

Клиентские приложения WCF используют класс ChannelFactory<TChannel> для создания коммуникационного канала со службой WCF.WCF client applications use the ChannelFactory<TChannel> class to create a communication channel with a WCF service. Создание экземпляров класса ChannelFactory<TChannel> оказывает определенное влияние на производительность, поскольку выполняются следующие операции:Creating ChannelFactory<TChannel> instances incurs some overhead because it involves the following operations:

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

  2. Отображение всех необходимых типов CLRReflecting all of the required CLR types

  3. Построение стека каналовConstructing the channel stack

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

Чтобы уменьшить дополнительные расходы ресурсов, WCF может кэшировать фабрики каналов при использовании прокси клиента WCF.To help minimize this overhead, WCF can cache channel factories when you are using a WCF client proxy. Дополнительные сведения см. в разделе фабрики каналов и кэширование.For more information, see Channel Factory and Caching.

Сжатие и двоичный кодировщикCompression and the Binary Encoder

Начиная с версии WCF 4.5, в двоичном кодировщике появилась поддержка сжатия.Beginning with WCF 4.5 the WCF binary encoder adds support for compression. Тип сжатия задается с помощью свойства CompressionFormat.The type of compression is configured with the CompressionFormat property. Свойство CompressionFormat должно быть задано и в клиенте и в службе.Both the client and the service must configure the CompressionFormat property. Сжатие будет работать для протоколов HTTP, HTTPS и TCP.Compression will work for HTTP, HTTPS, and TCP protocols. Если клиент указывает использование сжатия, но служба его не поддерживает, возникает исключение протокола, указывающее на несоответствие.If a client specifies to use compression but the service does not support it a protocol exception is thrown indicating a protocol mismatch. Дополнительные сведения см. в разделе Выбор кодировщика сообщенийFor more information, see Choosing a Message Encoder

UDPUDP

Добавлена поддержка для транспорта UDP, что позволяет разработчикам писать службы, использующие «отправить и забыть» обмена сообщениями.Support has been added for a UDP transport which allows developers to write services that use "fire and forget" messaging. Клиент отправляет сообщение службе, но не ожидает от нее ответа.A client sends a message to a service and expects no response from the service.

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

Была добавлена поддержка нескольких режимов проверок подлинности, поддерживаемых службами IIS, в одной конечной точке WCF при использовании транспорта HTTP и безопасности транспорта.Support has been added to support multiple authentication modes, as supported by IIS, on a single WCF endpoint when using the HTTP transport and transport security. Служба IIS позволяет включить несколько режимов проверки подлинности в виртуальном каталоге. Эта возможность позволяет одной конечной точке WCF поддерживать несколько режимов проверки подлинности, разрешенных для виртуального каталога, в котором размещена служба WCF.IIS allows you to enable multiple authentication modes on a virtual directory, this feature allows a single WCF endpoint to support the multiple authentication modes enabled for the virtual directory where the WCF service is hosted.

Поддержка IDNIDN Support

Добавлена поддержка служб WCF с интернационализированными именами домена (IDN).Support has been added to allow for WCF services with Internationalized Domain Names. Дополнительные сведения см. в разделе WCF и международные доменные имена.For more information see WCF and Internationalized Domain Names.

HttpClientHttpClient

Был добавлен новый класс HttpClient, существенного облегчающий работу с HTTP-запросами.A new class called HttpClient has been added to make working with HTTP requests much easier. Дополнительные сведения см. в разделе разработка приложений, социальными сетями и подключение к HTTP-службам и пример HTTP-клиента.For more info, see Making apps social and connected with HTTP services and the HTTP Client Sample.

Технология Intellisense в файлах конфигурацииConfiguration Intellisense

Значения атрибутов в файлах конфигурации для настраиваемых атрибутов, определенных в проекте, теперь поддерживают технологию intellisense для ускорения работы.Attribute values in configuration files for custom attributes defined in the project now support intellisense to facilitate working with configurations quickly and accurately.

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

WCF элементы и атрибуты теперь нужно подсказки в редакторе XML, более легко и точно определить назначение элемента или атрибута.WCF elements and attributes now have tooltips in the XML editor, to more easily and accurately identify the purpose of the element or attribute.

Вставка данных в виде классовPaste Data as Classes

В проекте WCF типы данных, определенные в XML (например, предоставленные как служба), могут быть вставлены непосредственно в кодовую страницу.In a WCF project, data types defined in XML (such as are exposed in a service) can be pasted directly into a code page. XML-тип будет вставлен как тип CLR.The XML type will be pasted as a CLR type. См. в разделе формирование классов типов данных из XML для получения дополнительных сведений.See Generating Data Type Classes from XML for more details.

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

В Visual Studio 2010 WebServiceHost автоматически создавал конечную точку по умолчанию независимо от того, была она явно указана или нет.In Visual Studio 2010, WebServiceHost automatically created a default endpoint whether you explicitly specified an endpoint or not. В Visual Studio 2012 и более поздних версиях WebServiceHost только создает конечную точку по умолчанию, если конечные точки не добавляются явным образом.In Visual Studio 2012 and later, WebServiceHost only creates a default endpoint if no endpoints are explicitly added. Если клиент ожидает конечную точку по умолчанию можно явно добавить конечную точку и направить клиента к нему.If your client is expecting the default endpoint you can explicitly add an endpoint and point the client to it. Кроме того, можно вернуть прежнее поведение WCF, добавив следующий параметр в файл конфигурации приложения.Alternatively, you can tell WCF to revert back to the previous behavior by adding the following setting to you application’s configuration file

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

IHttpCookieContainerManagerIHttpCookieContainerManager

Этот интерфейс, предоставляемый IChannelFactory<TChannel>, существенно упрощает работу с куки-файлами на стороне клиента.This interface, exposed by IChannelFactory<TChannel>, makes working with cookies on the client side much easier. Когда свойство AllowCookies имеет значение true для привязки, доступ к куки-файлам можно получить следующим образом:When AllowCookies is set to true on the binding, you can access cookies by using the following code:

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

Затем можно получать или устанавливать куки-файлы из CookieContainer.You can then retrieve or set the cookies from the CookieContainer. Когда свойство AllowCookies имеет значение false, куки-файл можно получить вручную с помощью OperationContext и отправить его запросом с помощью другого OperationContext или средства проверки сообщений.When AllowCookies is set to false, you can manually retrieve the cookies using OperationContext and send it in other requests using another OperationContext or message inspector. Интерфейс IHttpCookieContainerManager позволяет выполнить проверку подлинности пользователя для службы и использовать куки-файл, возвращенный службой, для проверки подлинности в других службах.The IHttpCookieContainerManager interface allows you to authenticate a user with a service and use the authentication cookie returned by that service to authenticate with other services.