Compartir a través de


Información general del modelo de programación web HTTP de WCF

El modelo de programación WEB HTTP de Windows Communication Foundation (WCF) proporciona los elementos de marco de trabajo básicos que son necesarios para compilar servicios WEB HTTP con WCF. Los servicios WEB HTTP de WCF están diseñados para que la gama más amplia de clientes posible tenga acceso a ellos, incluidos los exploradores web, y tienen los requisitos únicos siguientes:

  • URI y procesamiento de URI: los URI juegan un papel central en el diseño de servicios WEB HTTP. El modelo de programación WEB HTTP de WCF usa las clases UriTemplate y UriTemplateTable para proporcionar las funciones de procesamiento de URI.

  • Compatibilidad para las operaciones GET y POST: los servicios WEB HTTP usan el verbo GET para la recuperación de datos, además de varios verbos de invocación para la modificación de datos y la invocación remota. El modelo de programación WEB HTTP de WCF usa los atributos WebGetAttribute y WebInvokeAttribute para asociar las operaciones de servicio con el verbo GET y otros verbos HTTP, como PUT, POST y DELETE.

  • Varios formatos de datos: los servicios de tipo web procesan muchos tipos de datos además de los mensajes SOAP. El modelo de programación WEB HTTP de WCF usa WebHttpBinding y WebHttpBehavior para admitir muchos formatos de datos diferentes incluyendo documentos XML, objeto de datos de JSON y secuencias de contenido binario como imágenes, archivos de vídeo o texto sin formato.

El modelo de programación WEB HTTP de WCF extiende el alcance de WCF para abarcar escenarios de tipo web que incluyen los servicios WEB HTTP, AJAX y JSON, así como las fuentes de distribución (ATOM/RSS). Para obtener más información sobre los servicios AJAX y JSON, vea Integración de AJAX y compatibilidad de JSON. Para obtener más información sobre la distribución, vea Información general de distribución de WCF.

No existen restricciones adicionales en los tipos de datos que puedan devolverse desde un servicio WEB HTTP. Cualquier tipo serializable se puede devolver a partir de una operación de servicio WEB HTTP de WCF. Puesto que estas operaciones de servicio WEB HTTP las puede invocar un explorador web existe un límite en los tipos de datos que se pueden especificar en una dirección URL. Para obtener más información sobre los tipos admitidos de forma predeterminada, vea la sección Parámetros de cadena de consulta y direcciones URL de UriTemplate a continuación. El comportamiento predeterminado se puede cambiar proporcionando su propia implementación de la clase T:System.ServiceModel.Dispatcher.QueryStringConverter que especifica cómo convertir los parámetros especificados de una dirección URL en el tipo de parámetro real. Para obtener más información, vea QueryStringConverter

Bb412172.Caution(es-es,VS.100).gifPrecaución:
Los servicios escritos mediante el modelo de programación WEB HTTP de WCF no usan mensajes SOAP. Por este motivo, no se podrán usar las características de seguridad proporcionadas por WCF. Puede, sin embargo, usar la seguridad basada en el transporte hospedando el servicio con HTTPS. Para obtener más información sobre la seguridad de WCF, vea Información general sobre seguridad

Bb412172.Warning(es-es,VS.100).gif Precaución:
Si se instala la extensión WebDAV para IIS, se puede provocar que los servicios web HTTP devuelvan un error 405 HTTP cuando la extensión WebDAV intente administrar todas las solicitudes PUT. Para evitar este problema puede desinstalar la extensión WebDAV o deshabilitarla para su sitio web. Para obtener más información, vea IIS y WebDav

Procesamiento de URI con UriTemplate y UriTemplateTable

Las plantillas URI proporcionan una sintaxis eficaz para expresar grandes conjuntos de URI similares estructuralmente. Por ejemplo, la siguiente plantilla expresa el conjunto de todos los URI de tres segmentos que comienzan en "a" y acaban en "c" sin tener en cuenta el valor del segmento intermedio: a/{segmento}/c

Esta plantilla describe los URI de la siguiente manera:

  • a/x/c

  • a/y/c

  • a/z/c

  • etc.

En esta plantilla, la notación de la llave (" {segmento}") indica un segmento variable en lugar de un valor literal.

.NET Framework proporciona una API para trabajar con plantillas URI denominadas UriTemplate. Las UriTemplates permiten lo siguiente:

  • Puede llamar a uno de los métodos Bind con un conjunto de parámetros para generar un URI totalmente cerrado que coincide con la plantilla. Esto significa que todas las variables dentro de la plantilla URI se reemplaza con valores reales.

  • Puede llamar Match() con un URI candidato, que utiliza una plantilla para dividir un URI candidato en sus partes constituyentes y devuelve un diccionario que contiene las partes diferentes del URI etiquetadas según las variables de la plantilla.

  • Bind() y Match() son inversos para que pueda llamar Match( Bind(x)) y vuelven con el mismo entorno con el que comenzó.

Hay muchas veces (sobre todo en el servidor, donde es necesario enviar una solicitud a una operación de servicio basada en el URI) que desea realizar un seguimiento de un conjunto de objetos UriTemplate en una estructura de datos que puede direccionar independientemente cada una de las plantillas contenidas. UriTemplateTable representa un conjunto de plantillas URI y selecciona la mejor coincidencia en un conjunto de plantillas y un URI candidato. Esto no está asociado a ninguna pila de conexión de red determinada (incluido WCF) por lo que puede utilizarlo dondequiera que necesario.

El modelo de servicio de WCF hace uso de UriTemplate y UriTemplateTable para asociar las operaciones del servicio a un conjunto de URI descrito mediante una UriTemplate. Una operación de servicio está asociada a una UriTemplate, usando WebGetAttribute o WebInvokeAttribute. Para obtener más información sobre UriTemplate y UriTemplateTable, vea UriTemplate y UriTemplateTable.

Atributos WebGet y WebInvoke

Los servicios WEB HTTP de WCF hacen uso de verbos de recuperación (por ejemplo, HTTP GET), además de varios verbos de invocación (por ejemplo, HTTP POST, PUT y DELETE). El modelo de programación WEB HTTP de WCF permite a los desarrolladores de servicios controlar la plantilla URI y el verbo asociado con sus operaciones de servicio con WebGetAttribute y WebInvokeAttribute. WebGetAttribute y WebInvokeAttribute le permiten controlar cómo las operaciones individuales se ligan a los URI y los métodos HTTP asociados a esos URI. Por ejemplo, agregando en el siguiente código, WebGetAttribute y WebInvokeAttribute.

[ServiceContract]
interface ICustomer
{
  //"View It"
  
  [WebGet]
  Customer GetCustomer():
  
  //"Do It"
    [WebInvoke]
  Customer UpdateCustomerName( string id, 
                               string newName );
}

El código anterior le permite realizar las solicitudes HTTP siguientes.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute establece como valor predeterminado POST pero también puede utilizarlo para otros verbos.

[ServiceContract]
interface ICustomer
{
  //"View It" -> HTTP GET
    [WebGet( UriTemplate="customers/{id}" )]
  Customer GetCustomer( string id ):
  
  //"Do It“ -> HTTP PUT
  [WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

Para ver un ejemplo completo de un servicio de WCF que usa el modelo de programación WEB HTTP de WCF, vea Cómo: Crear un servicio básico web HTTP de WCF

Parámetros de cadena de consulta y direcciones URL de UriTemplate

Se puede llamar a los servicios de tipo web desde un explorador web escribiendo una URL que está asociada a una operación del servicio. Estas operaciones del servicio pueden tomar parámetros de cadena de consulta que se deben especificar en forma de cadena dentro de la dirección URL. La siguiente tabla muestra los tipos que se pueden pasar dentro de una dirección URL y el formato utilizado.

Tipo Formato

Byte

0 - 255

SByte

-128 - 127

Int16

-32768 - 32767

Int32

-2,147,483,648 - 2,147,483,647

Int64

-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807

UInt16

0 - 65535

UInt32

0 - 4,294,967,295

UInt64

0 - 18,446,744,073,709,551,615

Single

-3.402823e38 - 3.402823e38 (no se requiere la notación exponencial)

Double

-1.79769313486232e308 - 1.79769313486232e308 (no se requiere la notación exponencial)

Char

Cualquier carácter individual

Decimal

Cualquier decimal en notación estándar (sin exponente)

Boolean

True o False (sin distinción entre mayúsculas y minúsculas)

String

Cualquier cadena (no se admite la cadena nula y no se utilizan caracteres de escape)

DateTime

MM/DD/YYYY

MM/DD/YYYY HH:MM:SS [AM|PM]

Mes día año

Mes día año HH:MM:SS [AM|PM]

TimeSpan

DD.HH:MM:SS

Donde DD = Días, HH = Horas, MM = minutos, SS = Segundos

Guid

Un GUID, por ejemplo:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8

DateTimeOffset

MM/DD/YYYY HH:MM:SS MM:SS

Donde DD = Días, HH = Horas, MM = minutos, SS = Segundos

Enumeraciones

El valor de enumeración, por ejemplo, que define la enumeración como se muestra en el código siguiente.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

Cualquiera de los valores de enumeración individuales (o sus valores enteros correspondientes) se puede especificar en la cadena de consulta.

Tipos que tienen TypeConverterAttribute que puede convertir el tipo en una representación de cadena y viceversa.

Según el convertidor de tipos.

Los formatos y el modelo de programación WEB HTTP de WCF

El modelo de programación WEB HTTP de WCF tiene nuevas características que funcionan con muchos formatos de datos diferentes. En la capa de enlace, WebHttpBinding puede leer y escribir los siguientes tipos diferentes de datos:

  • XML

  • JSON

  • Secuencias binarias opacas

Esto significa que el modelo de programación WEB HTTP de WCF puede administrar cualquier tipo de datos, pero puede estar programando con Stream.

.NET Framework 3,5 proporciona compatibilidad con los datos JSON (AJAX) y las fuentes de distribución (incluidas ATOM y RSS). Para obtener más información sobre estas características, vea Formato de web HTTP de WCF Información general de distribución de WCF y Integración de AJAX y compatibilidad de JSON.

El modelo de programación WEB HTTP de WCF y la seguridad

Dado que el modelo de programación WEB HTTP de WCF no es compatible con los protocolos WS-*, la única manera de proteger un servicio WEB HTTP de WCF consiste en exponer el servicio a través de HTTPS mediante SSL. Para obtener más información sobre la configuración de SSL con IIS 7.0, vea Cómo implementar SSL en IIS

Solución de problemas relacionados con el modelo de programación WEB HTTP de WCF

Al llamar a los servicios WEB HTTP de WCF mediante un objeto ChannelFactory para crear un canal, WebHttpBehavior usa la clase EndpointAddress establecida en el archivo de configuración, aunque se pase una EndpointAddress diferente al ChannelFactory.

Vea también

Conceptos

Modelo de objetos de programación web HTTP de WCF

Otros recursos

Sindicación en WCF
Modelo de programación de web HTTP de WCF