Cabeçalhos e propriedades de mensagens

Esta seção descreve os cabeçalhos e propriedades de mensagens.

Cabeçalhos de mensagem

Ao enviar uma mensagem, você pode especificar as propriedades de mensagem a seguir. Se uma única mensagem for enviada ou recebida, essas propriedades estarão contidos no cabeçalho HTTP BrokerProperties em um formato codificado em JSON. Se um lote de mensagens for enviado, essas propriedades farão parte do corpo HTTP codificado em JSON. Para obter mais informações, consulte Enviar Mensagem e Enviar Lote de Mensagens.

A tabela a seguir lista as propriedades Microsoft.ServiceBus.Messaging.BrokeredMessage . As propriedades podem aparecer em qualquer ordem. Se uma propriedade não for especificada, o Barramento de Serviço usará o valor padrão dessa propriedade. Propriedades de agente que não aquelas listadas são ignoradas. As propriedades aceitas são independentes do valor de api-version especificado. O especificador api-version não é necessário na solicitação HTTP.

Se ambas as propriedades SessionId e PartitionKey forem definidas, elas deverão ser definidas com o mesmo valor.

Um cabeçalho HTTP de nome BrokerProperties contém todos os cabeçalhos BrokeredMessage. As propriedades estão formatadas no padrão JSON. Isso facilita a extensão das propriedades de BrokeredMessage. Além disso, ele alinha o modelo de programação da Web ao aproveitar o formato amigável para Web JSON. Isso facilita a produção e o consumo das propriedades da mensagem com uma menor análise de cadeia de caracteres. A seguir, um exemplo de cabeçalhos 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“}  

A seguinte tabela ilustra como as propriedades de BrokeredMessage são mapeadas para os cabeçalhos HTTP.

BrokeredMessage(SBMP) Partes Type Cabeçalho HTTP Acessibilidade HTTP Req/Res
ContentType string Tipo de conteúdo 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
Rótulo string BrokerProperties {Label} get, set Req, Res
ReplyTo string BrokerProperties {ReplyTo} get, set Req, Res
EnqueuedTimeUtc DateTime Data get Res
SequenceNumber long BrokerProperties {SequenceNumber} get Res
timeToLive TimeSpan BrokerProperties collection {TimeToLive} get, set Req, Res
Para 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

Além dessas propriedades, você pode especificar propriedades personalizadas. Se uma única mensagem for enviada ou recebida, cada propriedade personalizada será colocada em seu próprio cabeçalho HTTP. Se um lote de mensagens for enviado, as propriedades personalizadas farão parte do corpo HTTP codificado em JSON. Para obter mais informações, consulte Enviar Mensagem e Enviar Lote de Mensagens.

Observações

  • DateTime Os cabeçalhos são formatados conforme definido pelo RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Por exemplo, “Dom., 6 de nov. de 1994 08:49:37 GMT”.

  • BrokerProperties {TimeToLive} é o número de segundos do TimeSpan (duplo).

  • ExpiresAtUtc não tem um cabeçalho HTTP correspondente, porque pode ser derivado de Date e BrokerProperties {TimeToLive}.

  • Os cabeçalhos de mensagem com um acessador get podem somente aparecer na resposta HTTP (isto é, a mensagem recebida). Quando esses cabeçalhos estão presentes na solicitação HTTP (isto é, a mensagem enviada), eles são ignorados silenciosamente. Cabeçalhos HTTP não reconhecidos também são ignorados silenciosamente.

  • Se o valor for mal formado, um código de status HTTP apropriado é retornado ao cliente.

Propriedades da mensagem

As propriedades da mensagem são pares de chave-valor definidos pelo usuário contidos em message.Properties. Para o cliente denso SBMP, os valores estão restritos a byte, sbyte, char, short, ushort, int, uint, long, ulong, float, double, decimal, bool, Guid, string, Uri, DateTime, DateTimeOffset e TimeSpan.

Para REST/HTTP, Uri e DateTimeOffset não são suportados (se eles estiverem em uma BrokeredMessage, não estão incluídos nos cabeçalhos HTTP). Os tipos GUID são convertidos para cadeias de caracteres e os tipos TimeSpan são convertidos para “segundos totais”. Devido a essas conversões, a fidelidade do tipo será perdida. Qualquer nome de propriedade que corresponda ao cabeçalho HTTP restrito (por exemplo, Connection, Expect e assim por diante) também é excluído.

Cada par chave-valor em message.Properties será mapeado para um cabeçalho HTTP no formato a seguir. prop é o nome da chave e value é a representação de cadeia de caracteres do valor:

prop_name: value  

O tipo do valor está inferido. Se estiver fechado por aspas, então:

  • Se o conteúdo tiver um formato de data RFC2616, o agente o tratará como uma System.DateTime.

  • Caso contrário, o agente removerá as aspas e tratará o conteúdo como sendo uma System.String.

Se não estiver fechado por aspas, então:

  1. Se o conteúdo for verdadeiro ou falso (diferenciar maiúsculas e minúsculas), o agente o tratará como sendo um System.Boolean com o valor correspondente.

  2. Se o conteúdo puder ser analisado como um número inteiro, o agente o tratará como sendo um System.Int64.

  3. Se o conteúdo puder ser analisado como um número em ponto flutuante, o agente o tratará como sendo um System.Double.

  4. Caso contrário, o agente rejeitará a mensagem.

Por exemplo:

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

Corpo da mensagem

Nenhuma conversão é realizada entre o fluxo do corpo HTTP de solicitação/resposta e BrokerMessage.BodyStream. Além disso, o cabeçalho Content-Type da solicitação HTTP é preservado e retornado ao receptor da mensagem para permitir que o aplicativo interprete corretamente os bytes no corpo.

Se a mensagem for criada com o cliente denso SBMP sem um serializador de objeto XML personalizado, o tipo de conteúdo será padrão para “application/msbin1”, que é o DataContractBinarySerializer, a não ser que o aplicativo o mude explicitamente (por exemplo, message.ContectType=”application/mytype”) após a mensagem ser criada. O valor do tipo de conteúdo é retornado ao consumidor do HTTP. É responsabilidade do aplicativo decidir como desserializar os bytes no corpo.

A associação do Barramento de Serviço do WCF define o ContentType como o do codificador de ContentTypemensagens. Por exemplo, se um codificador de mensagem de texto for usado, o Content-Type deverá ser “application/soap+xml”.

Conversão de mensagem

A conversão entre uma solicitação/resposta HTTP e uma mensagem é realizada no provedor do tempo de execução do sistema de mensagens HTTP. Os métodos de conversão são aumentados para incluir o mapeamento de cabeçalho/propriedades na tabela mencionada nesta seção e para preservar o content-type da mensagem.