Encabezados y propiedades de mensaje

En esta sección se describen las propiedades y los encabezados de los mensajes.

Encabezados de mensaje

Cuando envíe un mensaje, puede especificar las propiedades de mensaje siguientes. Si se envía o recibe un solo mensaje, estas propiedades están en el encabezado HTTP BrokerProperties con formato codificado en JSON. Si se envía un lote de mensajes, estas propiedades forman parte del cuerpo HTTP codificado en JSON. Para obtener más información, vea Enviar mensajes y Enviar lote de mensajes.

En la tabla siguiente se enumeran las propiedades Microsoft.ServiceBus.Messaging.BrokeredMessage . Las propiedades pueden aparecer en cualquier orden. Si no se especifica una propiedad, Service Bus usa el valor predeterminado para esa propiedad. Las propiedades de agente que no están en la lista se omiten. Las propiedades aceptadas son independientes del valor de la api-version especificada. El especificador de api-version no es necesario en la solicitud HTTP.

Si están establecidas las propiedades SessionId y PartitionKey, deben tener el mismo valor.

Un encabezado HTTP de nombre BrokerProperties contiene todos los encabezados BrokeredMessage. Las propiedades tienen formato JSON. Esto facilita la extensión de las propiedades BrokeredMessage. También, está en sintonía con el modelo de programación web mediante el aprovechamiento del formato JSON compatible con web. Esto facilita la producción y el consumo de propiedades de mensajes con menos análisis de cadenas. A continuación se muestra un ejemplo de encabezados BrokeredMessage:

BrokerProperties:  { “SessionId”: “{27729E1-B37B-4D29-AA0A-E367906C206E}”, “MessageId”: “{701332E1-B37B-4D29-AA0A-E367906C206E}”, “TimeToLive” : 90, “CorrelationId”: “{701332F3-B37B-4D29-AA0A-E367906C206E}”, “SequenceNumber“ : 12345, “DeliveryCount“ : 2, “To“ : "http://contoso.com“, “ReplyTo“ : "http://fabrikam.com“,  "EnqueuedTimeUtc“ : " Sun, 06 Nov 1994 08:49:37 GMT“, "ScheduledEnqueueTimeUtc“ : " Sun, 06 Nov 1994 08:49:37 GMT“}  

En la siguiente tabla se muestra cómo se asignan las propiedades BrokeredMessage a los encabezados HTTP.

Partes de BrokeredMessage (SBMP) Tipo Encabezado HTTP Accesibilidad HTTP Req/Res
ContentType string Content-Type get, set Req, Res
CorrelationId string BrokerProperties{CorrelationId} get, set Req, Res
SessionID string BrokerProperties {SessionId} get, set Req, Res
DeliveryCount int BrokerProperties {DeliveryCount } get Res
LockedUntilUtc DateTime BrokerProperties{LockedUntil} get Res
LockToken Guid BrokerProperties{LockToken} get Res
MessageId string BrokerProperties{MessageId} get, set Res
Etiqueta string BrokerProperties {Label} get, set Req, Res
ReplyTo string BrokerProperties {ReplyTo} get, set Req, Res
EnqueuedTimeUtc DateTime Date get Res
SequenceNumber long BrokerProperties {SequenceNumber} get Res
timeToLive TimeSpan Colección BrokerProperties {TimeToLive} get, set Req, Res
En string BrokerProperties {To} get, set Req, Res
ScheduledEnqueueTimeUtc DateTime BrokerProperties {ScheduledEnqueueTimeUtc} get, set Req, Res
ReplyToSessionId string BrokerProperties {ReplyToSessionId} get, set Req, Res
PartitionKey string BrokerProperties {PartitionKey} get, set Req, Res

Además de estas propiedades, se pueden especificar propiedades personalizadas. Si se envía o recibe un solo mensaje, cada propiedad personalizada se ubica en su encabezado HTTP propio. Si se envía un lote de mensajes, las propiedades forman parte del cuerpo HTTP codificado en JSON. Para obtener más información, vea Enviar mensajes y Enviar lote de mensajes.

Notas

  • DateTime Los encabezados tienen el formato definido por RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Por ejemplo, "Sun, 06 Nov 1994 08:49:37 GMT".

  • BrokerProperties {TimeToLive} es el número de segundos de TimeSpan (double).

  • ExpiresAtUtc no tiene un encabezado HTTP correspondiente porque se pueden derivar de Date y BrokerProperties {TimeToLive}.

  • Los encabezados de los mensajes con un descriptor de acceso get solo pueden aparecer en la respuesta HTTP (por ejemplo, un mensaje recibido). Cuando estos encabezados están presentes en la solicitud HTTP (es decir, en el mensaje enviado), se ignoran en silencio. Los encabezados HTTP no reconocidos también se ignoran en silencio.

  • Si el valor está mal formado, se devuelve un código de estado HTTP apropiado al cliente.

Propiedades del mensaje

Las propiedades de mensajes son pares clave-valor definidas por el usuario que están contenidas en message.Properties. Para el cliente grueso de SBMP, los valores están restringidos a byte, , charsbyte, short, intDateTimefloatulongdoublelongdecimalbooluintushortstringUriGuidDateTimeOffsety .TimeSpan

Para REST o HTTP, no se admiten Uri ni DateTimeOffset (si están en el BrokeredMessage, no están incluidos en los encabezados HTTP). Los tipos Guid se convierten a cadenas y los tipos TimeSpan se convierten a "segundos totales". Debido a estas conversiones, la fidelidad de tipos se perderá. También se excluirán los nombres de propiedades que correspondan al encabezado HTTP restringido (por ejemplo, Connection, Expect, etc.).

Cada par clave-valor de message.Properties se asignará a un encabezado HTTP con el formato siguiente. prop es el nombre de clave y value es la representación de cadena del valor:

prop_name: value  

El tipo de valor se deduce. Si está acotado por comillas dobles:

  • Si el contenido tiene la forma de una fecha y hora de RFC2616, el agente lo trata como un valor System.DateTime.

  • En cualquier otro caso, el agente elimina las comillas y trata el contenido como un valor System.String.

Si no está acotado por comillas dobles:

  1. Si el contenido es true o false (distingue mayúsculas de minúsculas), el agente lo trata como un elemento System.Boolean con el valor correspondiente.

  2. Si el contenido se puede analizar como un entero, el agente lo trata como un System.Int64.

  3. Si el contenido se puede analizar como un número de punto flotante, el agente lo trata como un valor System.Double.

  4. En cualquier otro caso, el agente rechaza el mensaje.

Por ejemplo:

product: Windows 7 Ultimate  
price: 299.98  
order-time: Fri, 04 Mar 2011 08:49:37 GMT  

Cuerpo del mensaje

No se realizan conversiones entre la secuencia del cuerpo de la solicitud/respuesta HTTP y BrokerMessage.BodyStream. También, el encabezado Content-Type de la solicitud HTTP se conserva y se devuelve al receptor del mensaje para permitir que la aplicación interprete correctamente los bytes del cuerpo.

Si se crea el mensaje con el cliente grueso de SBMP sin un serializador de objetos xml personalizado, el tipo de contenido será por defecto "application/msbin1", que es el DataContractBinarySerializer, a menos que la aplicación lo cambie de forma explícita (por ejemplo, message.ContectType=”application/mytype”) después de la creación del mensaje. Se devuelve el valor de este tipo de contenido al consumidor HTTP. Es responsabilidad de la aplicación decidir cómo deserializar los bytes del cuerpo.

El enlace de Service Bus de WCF establece en ContentType el del codificador de ContentTypemensajes . Por ejemplo, si se utiliza un codificador de mensajes de texto, se espera que el Content-Type sea “application/soap+xml”.

Conversión de mensajes

La conversión entre una solicitud/respuesta HTTP y un mensaje se realiza en el proveedor en tiempo de ejecución de mensajería HTTP. Los métodos de conversión se han aumentado para incluir la asignación de encabezados y propiedades en la tabla de más arriba en esta misma sección y para preservar el content-type del mensaje.