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 deDate
yBrokerProperties {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
, , char
sbyte
, short
, int
DateTime
float
ulong
double
long
decimal
bool
uint
ushort
string
Uri
Guid
DateTimeOffset
y .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:
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.Si el contenido se puede analizar como un entero, el agente lo trata como un System.Int64.
Si el contenido se puede analizar como un número de punto flotante, el agente lo trata como un valor
System.Double
.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 ContentType
mensajes . 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.