Exportar (0) Imprimir
Expandir todo

Propiedades y control de mensajes

Actualizado: enero de 2014

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

Un encabezado HTTP denominado BrokerProperties contiene todos los encabezados de BrokeredMessage. Las propiedades tienen el formato JSON, lo que facilita la ampliación de las propiedades de BrokeredMessage. Además, se coordina con el modelo de programación web aprovechando el formato JSON, tan práctico para la web. De este modo se facilita la producción y el consumo de las propiedades de los mensajes con menos análisis de cadenas. A continuación se muestra un ejemplo de encabezados de 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 tabla siguiente se ilustra el modo en que las propiedades de BrokeredMessage se asignan a encabezados HTTP.

 

Partes de BrokeredMessage (SBMP) Tipo Encabezado HTTP Accesibilidad Sol/Resp HTTP

ContentType

string

Content-Type

get, set

Sol, Res

CorrelationId

string

BrokerProperties{CorrelationId}

get, set

Sol, Res

SessionID

string

BrokerProperties {SessionId}

get, set

Sol, 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

Label

string

BrokerProperties {Label}

get, set

Sol, Res

ReplyTo

string

BrokerProperties {ReplyTo}

get, set

Sol, Res

EnqueuedTimeUtc

DateTime

Date

get

Res

SequenceNumber

largo

BrokerProperties {SequenceNumber}

get

Res

TimeToLive

TimeSpan

BrokerProperties collection {TimeToLive}

get, set

Sol, Res

To

string

BrokerProperties {To}

get, set

Sol, Res

ScheduledEnqueueTimeUtc

DateTime

BrokerProperties {ScheduledEnqueueTimeUtc}

get, set

Sol, Res

ReplyToSessionId

string

BrokerProperties {ReplyToSessionId}

get, set

Sol, Res

Notas

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

  • BrokerProperties {TimeToLive} será el número de segundos del TimeSpan (doble).

  • ExpiresAtUtc no tiene un encabezado HTTP correspondiente porque puede obtenerse de Date y BrokerProperties { TimeToLive }.

  • Los encabezados de los mensajes con descriptor de acceso get solo pueden aparecer en la respuesta HTTP (es decir, mensaje recibido). Cuando estos encabezados están presentes en la solicitud HTTP (es decir, mensaje enviado), se omiten sin notificación. Los encabezados HTTP que no se reconozcan también se omiten sin notificación.

  • Si el valor está mal formado, se devolverá al cliente el código de estado HTTP correspondiente.

Las propiedades de los mensajes son parejas clave-valor contenidos en message.Properties. Para el cliente SBMP thick, los valores están restringidos a byte, sbyte, char, short, ushort, int, uint, long, ulong, float, double, decimal, bool, Guid, string, Uri, DateTime, DateTimeOffset y TimeSpan.

Para REST/HTTP, no se admiten Uri y DateTimeOffset (si están en BrokeredMessage, no se incluyen en los encabezados HTTP). Los tipos Guid se convierten en cadenas y los tipos TimeSpan se convierten en “segundos totales”. Debido a estas conversiones, se perderá la fidelidad de los tipos. Cualquier nombre de propiedad que se corresponda con el encabezado HTTP restringido (por ejemplo, Connection, Expect, etc.) también se excluirá.

Cada pareja clave-valor de message.Properties se asignará a un encabezado HTTP con el siguiente formato:

prop_name: value

Siendo prop el nombre de la clave y value la representación de cadena del valor.

El tipo del value se infiere. Si está rodeado por comillas dobles:

  • Si el contenido tiene la forma de una fecha hora RFC2616, el agente lo tratará como System.DateTime.

  • En caso contrario, el agente quitará las comillas y tratará el contenido como System.String.

Si no está rodeado por comillas dobles:

  1. Si el contenido es true o false (¡distingue mayúsculas y minúsculas!), el agente lo tratará como System.Boolean con el valor correspondiente.

  2. Si el contenido se puede analizar como entero, el agente lo tratará como System.Int64.

  3. Si el contenido se puede analizar como número con coma flotante, el agente lo tratará como System.Double.

  4. En caso contrario, el agente rechazará el mensaje.

Por ejemplo:

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

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

Si el mensaje se crea con el cliente SBMP thick sin serializador de objeto xml personalizado, el tipo de contenido será de forma predeterminada “application/msbin1”, que es DataContractBinarySerializer, a menos que la aplicación lo cambie explícitamente (por ejemplo, message.ContectType=”application/mytype”) una vez creado el mensaje. Este valor de tipo de contenido se devolverá al cliente HTTP. La aplicación decidirá el modo de deserializar los bytes del cuerpo.

El enlace The WCF Service Bus definirá el ContentType en el ContentType del codificador del mensaje. Por ejemplo, si se usa un codificador del mensaje de texto, se espera que Content-Type sea “application/soap+xml”.

La conversión entre una solicitud/respuesta HTTP y un mensaje se lleva a cabo en el proveedor de tiempo de ejecución de mensajería HTTP. Los métodos de conversión aumentarán para incluir la asignación de encabezado/propiedades en la tabla indicada anteriormente en esa sección, así como para conservar el content-type del mensaje.

Mostrar:
© 2014 Microsoft