Compartir a través de


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

El modelo de programación web proporciona los elementos de marco de trabajo básicos que son necesarios para crear servicios tipo web con Windows Communication Foundation (WCF). Los servicios tipo web están diseñados para que el intervalo más amplio de posibles clientes tenga acceso a ellos (incluidos los exploradores web sin marco de trabajo de cliente adicional) y tienen los siguientes requisitos únicos:

  • URI y procesamiento de URI. Los URI juegan un papel central en el diseño de servicios de estilo Web. El modelo de programación web de WCF utiliza las clases UriTemplate y UriTemplateTable para proporcionar las funciones de procesamiento de URI.
  • Compatibilidad para las operaciones GET y POST. Los servicios de estilo web utilizan 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 utiliza WebGetAttribute y WebInvokeAttribute para asociar las operaciones de servicio con ambos verbos GET y POST.
  • 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 utiliza 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 extiende el alcance de WCF para cubrir escenarios de tipo web que incluyen los servicios REST, AJAX y JSON y las fuentes de distribución (ATOM/RSS). Para obtener más información acerca de servicios AJAX y JSON, consulte Integración de AJAX y compatibilidad de JSON. Para obtener más información acerca de Distribución, consulte Información general de distribución de WCF.

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 3.5 proporciona una nueva API para trabajar con plantillas URI denominadas UriTemplate. 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 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, utilizando WebGetAttribute o WebInvokeAttribute.

Parámetros de operación de servicios y direcciones URL

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 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 un TypeConverterAttribute que puede convertir el tipo a y desde una representación de cadena.

Según el convertidor de tipos.

WebGet y WebInvoke

Los servicios de tipo web hacen uso de verbos de recuperación (por ejemplo, HTTP GET), además de varios verbos de la invocación (por ejemplo, HTTP POST, el verbo utilizado por los servicios SOAP). El modelo de programación web permite a los programadores 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"
  [OperationContract]
  [WebGet]
  Customer GetCustomer():
  
  //"Do It"
  [OperationContract]
  [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
  [OperationContract]
  [WebGet( UriTemplate=“customers/{id}” )]
  Customer GetCustomer( string id ):
  
  //"Do It“ -> HTTP PUT
  [OperationContract]
  [WebInvoke( UriTemplate=“customers/{id}”, Method=“PUT” )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

Formatos y el modelo de programación web

El modelo de programación web 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 puede administrar cualquier tipo de datos pero, puede estar programando contra 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 acerca de estas características, consulte Información general de distribución de WCF y Integración de AJAX y compatibilidad de JSON.

Consulte también

Conceptos

Modelo de objetos de programación web de WCF

Otros recursos

Sindicación en WCF
Modelo de programación web