Compartir a través de


Novedades de Windows Communication Foundation 4.5

En este tema se describen las características nuevas de Windows Communication Foundation (WCF) versión 4.5.

gRPC como alternativa a WCF

gRPC es un marco RPC moderno que es una alternativa popular a WCF. gRPC se basa en HTTP/2, que proporciona una serie de ventajas sobre WCF, entre las que se incluyen:

  • Rendimiento: gRPC es mucho más eficaz que WCF, especialmente para las conexiones de larga duración.
  • Escalabilidad: gRPC está diseñado para escalar a un gran número de clientes y servidores.
  • Seguridad: gRPC admite una variedad de mecanismos de seguridad, como TLS y autenticación.
  • Multiplataforma: gRPC es independiente de la plataforma y se puede usar con una variedad de lenguajes de programación.

Para obtener más información sobre el desarrollo o la migración de aplicaciones WCF a gRPC, consulte:

Características de simplificación de WCF

Se ha realizado mucho trabajo para facilitar el desarrollo y el mantenimiento de las aplicaciones WCF 4.5. Para obtener más información, vea Características de simplificación de WCF.

Soporte asincrónico basado en tareas

De forma predeterminada, Agregar referencia de servicio genera métodos de operación asincrónicos de devolución de tareas. Esto se hace tanto para métodos sincrónicos como asincrónicos. Esto le permite llamar a las operaciones de servicio de forma asincrónica mediante el nuevo modelo de programación asincrónica basado en tareas. Cuando llamas al método proxy generado, WCF construye un objeto de tarea para representar la operación asincrónica y te devuelve esa tarea. La tarea se completa cuando se completa la operación. Al implementar una operación asincrónica, puede implementarla como una operación asincrónica basada en tareas. Para obtener más información, vea Operaciones sincrónicas y asincrónicas.

Archivos de configuración generados simplificados

Al agregar una referencia de servicio en Visual Studio o usar la herramienta SvcUtil.exe, se genera un archivo de configuración de cliente. En versiones anteriores de WCF, estos archivos de configuración contenían el valor de cada propiedad de enlace incluso si su valor es el valor predeterminado. En WCF 4.5, los archivos de configuración generados contienen solo las propiedades de enlace que se establecen en un valor no predeterminado.

Para obtener más información, vea Características de simplificación de WCF.

Contract-First Desarrollo

WCF admite ahora el desarrollo de contrato primero. El svcutil.exe tiene un modificador /serviceContract que permite generar contratos de datos y servicios a partir de un documento WSDL.

Agregar referencia de servicio desde un proyecto de subconjunto portátil

Los proyectos de subconjuntos portátiles permiten a los programadores de ensamblados de .NET mantener un único árbol de origen y un sistema de compilación, a la vez que admiten varias plataformas .NET (escritorio, Silverlight, Windows Phone y Xbox). Los proyectos de subconjuntos portátiles solo hacen referencia a bibliotecas portátiles de .NET que son ensamblados que se pueden usar en cualquier plataforma .NET. La experiencia del desarrollador es la misma que agregar una referencia de servicio dentro de cualquier otra aplicación cliente wcF. Para obtener más información, vea Agregar referencia de servicio en un proyecto de subconjunto portátil.

Cambio en el modo de compatibilidad predeterminado de ASP.NET

WCF proporciona ASP.NET modo de compatibilidad para conceder a los desarrolladores acceso completo a las características de la canalización HTTP de ASP.NET al escribir servicios WCF. Para usar este modo, debe establecer el atributo aspNetCompatibilityEnabled en true en la sección <serviceHostingEnvironment> de web.config. Además, cualquier servicio en este appDomain debe tener la propiedad RequirementsMode en su AspNetCompatibilityRequirementsAttribute configurada a Allowed o Required. De forma predeterminada, AspNetCompatibilityRequirementsAttribute se establece ahora en Allowed. Para obtener más información, consulte Servicios WCF y ASP.NET.

Nuevos valores de transporte predeterminados

Para simplificar la configuración, se han cambiado varios valores predeterminados de propiedad de transporte. Para obtener más información, vea Características de simplificación de WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas contiene valores de cuota configurables para lectores de diccionario XML que limitan la cantidad de memoria utilizada por un codificador al crear un mensaje. Aunque estas cuotas son configurables, los valores predeterminados han cambiado para reducir la posibilidad de que un desarrollador tenga que establecerlas explícitamente. Para obtener más información, vea Características de simplificación de WCF.

Validación de configuración de WCF

Como parte del proceso de compilación dentro de Visual Studio, los archivos de configuración de WCF ahora se validan para los atributos definidos en el proyecto. Se muestra una lista de errores o advertencias de validación en Visual Studio si se produce un error en la validación.

Información sobre herramientas del Editor XML

Para ayudar a los desarrolladores de servicios WCF nuevos y existentes a configurar sus servicios, el editor XML de Visual Studio ahora proporciona información sobre herramientas para cada elemento de configuración y sus propiedades que forman parte del archivo de configuración del servicio.

Mejoras de streaming

Se ha agregado compatibilidad con el streaming asincrónico verdadero en el que el lado de envío ahora no bloquea los subprocesos si el lado de recepción no lee ni ralentiza la lectura, lo que aumenta la escalabilidad. Se quitó la limitación del almacenamiento en búfer de mensajes cuando un cliente envía un mensaje transmitido a un servicio WCF hospedado en IIS. Para obtener más información, vea Características de simplificación de WCF.

Simplificación de la exposición de un punto de conexión a través de HTTPS con IIS

Se ha añadido un mapeo de protocolo HTTPS para simplificar la exposición de un punto final a través de HTTPS. Para habilitar un punto de conexión HTTPS, asegúrese de que el sitio web tiene configurado un enlace HTTPS y un certificado SSL y, a continuación, simplemente habilite HTTPS para el directorio virtual que hospeda el servicio. Si los metadatos están habilitados para el servicio, también se expondrán a través de HTTPS.

Generación de un único documento WSDL

Algunas pilas de procesamiento de WSDL de terceros no pueden procesar documentos WSDL que dependen de otros documentos a través de xsd:import. WCF ahora permite especificar que toda la información de WSDL se devuelva en un único documento. Para solicitar un único documento WSDL, anexe "?singleWSDL" al URI al solicitar metadatos del servicio.

Compatibilidad con WebSocket

WebSockets es una tecnología que proporciona una verdadera comunicación bidireccional a través de los puertos 80 y 443 con características de rendimiento similares a TCP. Se han agregado dos enlaces nuevos para admitir la comunicación a través de un transporte de WebSocket. NetHttpBinding y NetHttpsBinding. Para obtener más información, consulte: Vinculaciones proporcionadas por el sistema.

Nuevos valores de transporte predeterminados

En la tabla siguiente se describen las opciones de configuración que han cambiado y dónde encontrar información adicional.

Propiedad Por Nuevo valor predeterminado Para obtener más información, consulte
tiempoDeEsperaDeInicializaciónDelCanal NetTcpBinding 30 segundos ChannelInitializationTimeout
escucharPendientes NetTcpBinding 12 * número de procesadores ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * número de procesadores para el transporte

4 * número de procesadores para SMSvcHost.exe
MaxPendingAccepts Configuración del servicio de uso compartido de puertos Net.TCP
númeroMáximoDeConexionesPendientes ConnectionOrientedTransportBindingElement 12 * número de procesadores MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 segundos Configuración del servicio de uso compartido de puertos Net.TCP

Configurar servicios WCF en el código

El uso de Windows Communication Foundation (WCF) permite que los desarrolladores configuren servicios mediante el uso de archivos de configuración o código. Los archivos de configuración son útiles cuando un servicio se debe configurar después de implementarse. Cuando se usan archivos de configuración, un profesional de TI solo debe actualizar el archivo de configuración; no es necesario que realice ninguna recompilación. Los archivos de configuración, sin embargo, pueden ser complejos y difíciles de mantener. No se admite la depuración de archivos de configuración y se hace referencia a los elementos de configuración por nombre, con lo que la creación de archivos de configuración resulta propensa a errores y difícil. El uso de WCF también permite que se configuren servicios mediante código. En versiones anteriores de WCF (4.0 y anteriores), la configuración de servicios mediante código era sencilla en los escenarios de servicios autohospedados; los puntos de conexión y los comportamientos podían configurarse en la clase ServiceHost antes de que se llamara a ServiceHost.Open. Sin embargo, en escenarios hospedados en web, no tiene acceso a la ServiceHost clase . Para configurar un servicio hospedado en web era necesario crear un System.ServiceModel.ServiceHostFactory que creara el ServiceHostFactory y realizara cualquier configuración necesaria. A partir de la versión 4.5 de .NET, en WCF se incluye una manera más sencilla de configurar los servicios autohospedados y los servicios hospedados en web mediante código. Para obtener más información, vea Configuración de servicios WCF en código.

Almacenamiento en caché de ChannelFactory

Las aplicaciones cliente WCF usan la ChannelFactory<TChannel> clase para crear un canal de comunicación con un servicio WCF. La creación ChannelFactory<TChannel> de instancias conlleva cierta sobrecarga porque implica las siguientes operaciones:

  1. Construcción del ContractDescription árbol

  2. Reflejar todos los tipos de CLR necesarios

  3. Construir la pila del canal

  4. Eliminación de recursos

Para ayudar a minimizar esta sobrecarga, WCF puede almacenar en caché los generadores de canales cuando se usa un proxy de cliente WCF. Para obtener más información, consulte Generador de canales y almacenamiento en caché.

Compresión y codificador binario

A partir de WCF 4.5, el codificador binario WCF agrega compatibilidad con la compresión. El tipo de compresión se configura con la CompressionFormat propiedad . Tanto el cliente como el servicio deben configurar la CompressionFormat propiedad . La compresión funcionará para los protocolos HTTP, HTTPS y TCP. Si un cliente especifica usar la compresión, pero el servicio no lo admite, se produce una excepción de protocolo que indica un error de coincidencia de protocolo. Para obtener más información, consulte Elección de un codificador de mensajes.

UDP

Se ha agregado compatibilidad con un transporte UDP que permite a los desarrolladores escribir servicios que usan mensajería "fire and forget". Un cliente envía un mensaje a un servicio y no espera ninguna respuesta del servicio.

Compatibilidad con la autenticación múltiple

Se ha agregado soporte para varios modos de autenticación, como lo admite IIS, en un único punto de conexión WCF cuando se utiliza el transporte HTTP y seguridad de transporte. IIS permite habilitar varios modos de autenticación en un directorio virtual, esta característica permite que un único punto de conexión WCF admita los varios modos de autenticación habilitados para el directorio virtual donde se hospeda el servicio WCF.

Compatibilidad con IDN

Se ha agregado compatibilidad para permitir servicios WCF con nombres de dominio internacionalizados. Para obtener más información, vea WCF y Nombres de dominio internacionalizados.

Cliente HTTP

Se ha agregado una nueva clase denominada HttpClient para facilitar mucho el trabajo con solicitudes HTTP. Para obtener más información, consulta HttpClient y Directrices para usar HttpClient.

IntelliSense de configuración

Los valores de atributo de los archivos de configuración para atributos personalizados definidos en el proyecto ahora admiten IntelliSense para facilitar el trabajo con configuraciones de forma rápida y precisa.

Información sobre herramientas de configuración

Los elementos y atributos WCF ahora tienen descripciones emergentes en el editor XML para identificar con mayor facilidad y precisión el propósito del elemento o atributo.

Pegar datos como clases

En un proyecto WCF, los tipos de datos definidos en XML (como se exponen en un servicio) se pueden pegar directamente en una página de códigos. El tipo XML se pegará como un tipo CLR. Consulte Generación de clases de tipo de datos a partir de XML para obtener más información.

WebServiceHost y puntos de conexión predeterminados

En Visual Studio 2010, WebServiceHost creó automáticamente un punto de conexión predeterminado si especificó explícitamente un punto de conexión o no. En Visual Studio 2012 y versiones posteriores, WebServiceHost solo crea un punto de conexión predeterminado si no se agrega explícitamente ningún punto de conexión. Si el cliente espera el punto de conexión predeterminado, puede agregar explícitamente un punto de conexión y apuntarlo al cliente. Como alternativa, puede indicar a WCF que vuelva al comportamiento anterior agregando la siguiente configuración al archivo de configuración de la aplicación.

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

IHttpCookieContainerManager

Esta interfaz, expuesta por IChannelFactory<TChannel>, facilita mucho el trabajo con cookies en el lado cliente. Cuando AllowCookies se establece en true en el enlace, puede acceder a las cookies mediante el código siguiente:

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

A continuación, puede recuperar o establecer las cookies desde el CookieContainer. Cuando AllowCookies está establecido en false, puede recuperar manualmente las cookies mediante OperationContext y enviarlas en otras solicitudes utilizando otro OperationContext o un inspector de mensajes diferente. La interfaz IHttpCookieContainerManager le permite autenticar a un usuario con un servicio y usar la cookie de autenticación devuelta por ese servicio para autenticarse con otros servicios.