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
Precaució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 |
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 |
---|---|
0 - 255 |
|
-128 - 127 |
|
-32768 - 32767 |
|
-2,147,483,648 - 2,147,483,647 |
|
-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
|
0 - 65535 |
|
0 - 4,294,967,295 |
|
0 - 18,446,744,073,709,551,615 |
|
-3.402823e38 - 3.402823e38 (no se requiere la notación exponencial) |
|
-1.79769313486232e308 - 1.79769313486232e308 (no se requiere la notación exponencial) |
|
Cualquier carácter individual |
|
Cualquier decimal en notación estándar (sin exponente) |
|
True o False (sin distinción entre mayúsculas y minúsculas) |
|
Cualquier cadena (no se admite la cadena nula y no se utilizan caracteres de escape) |
|
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] |
|
DD.HH:MM:SS Donde DD = Días, HH = Horas, MM = minutos, SS = Segundos |
|
Un GUID, por ejemplo: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
|
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.
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