Partilhar via


Propriedades e Cabeçalhos de Mensagens

Esta secção descreve os cabeçalhos e as propriedades das mensagens.

Cabeçalhos de mensagens

Ao enviar uma mensagem, pode especificar as seguintes propriedades de mensagem. Se uma única mensagem for enviada ou recebida, estas propriedades estão contidas no cabeçalho HTTP BrokerProperties num formato codificado em JSON. Se for enviado um lote de mensagens, estas propriedades fazem parte do corpo http codificado por JSON. Para obter mais informações, consulte Enviar Mensagem e Enviar Batch de Mensagens.

A tabela seguinte lista as propriedades Microsoft.ServiceBus.Messaging.BrokeredMessage . As propriedades podem aparecer por qualquer ordem. Se não for especificada uma propriedade, o Service Bus utiliza o valor predefinido para essa propriedade. As propriedades do mediador que não as listadas são ignoradas. As propriedades aceites são independentes do valor da versão de API especificada. O especificador da versão da API não é necessário no pedido HTTP.

Se as propriedades SessionId e PartitionKey estiverem ambas definidas, têm de ser definidas para o mesmo valor.

Um cabeçalho HTTP com o nome BrokerProperties contém todos os BrokeredMessage cabeçalhos. As propriedades são formatadas em JSON. Isto facilita a expansão das BrokeredMessage propriedades. Além disso, alinha-se com o modelo de programação Web ao tirar partido do formato JSON compatível com a Web. Isto torna mais fácil produzir e consumir propriedades de mensagens com menos análise de cadeias. Segue-se um exemplo de BrokeredMessage cabeçalhos:

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 tabela seguinte ilustra como BrokeredMessage as propriedades são mapeadas para cabeçalhos HTTP.

BrokeredMessage (SBMP) Peças Tipo Cabeçalho HTTP Acessibilidade HTTP Req/Res
ContentType string Content-Type obter, definir Req, Res
CorrelationId string BrokerProperties{CorrelationId} obter, definir Req, Res
SessionID string BrokerProperties {SessionId} obter, definir Req, Res
DeliveryCount int BrokerProperties {DeliveryCount } get Res
LockedUntilUtc DateTime BrokerProperties{LockedUntil} get Res
LockToken GUID BrokerProperties{LockToken} get Res
MessageId string BrokerProperties{MessageId} obter, definir Res
Etiqueta string BrokerProperties {Label} obter, definir Req, Res
Responder A string BrokerProperties {ReplyTo} obter, definir Req, Res
EnqueuedTimeUtc Data e Hora Data get Res
SequenceNumber long BrokerProperties {SequenceNumber} get Res
TimeToLive TimeSpan Coleção BrokerProperties {TimeToLive} obter, definir Req, Res
Para string BrokerProperties {To} obter, definir Req, Res
ScheduledEnqueueTimeUtc DateTime BrokerProperties {ScheduledEnqueueTimeUtc} obter, definir Req, Res
ReplyToSessionId string BrokerProperties {ReplyToSessionId} obter, definir Req, Res
PartitionKey string BrokerProperties {PartitionKey} obter, definir Req, Res

Além destas propriedades, pode especificar propriedades personalizadas. Se uma única mensagem for enviada ou recebida, cada propriedade personalizada é colocada no seu próprio cabeçalho HTTP. Se for enviado um lote de mensagens, as propriedades personalizadas fazem parte do corpo http codificado por JSON. Para obter mais informações, consulte Enviar Mensagem e Enviar Batch de Mensagens.

Notas

  • DateTime os cabeçalhos são formatados conforme definido por RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Por exemplo, "Dom, 06 nov 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 derivar de Date e BrokerProperties {TimeToLive}.

  • Os cabeçalhos de mensagens com um acessório get só podem aparecer na resposta HTTP (por exemplo, mensagem recebida). Quando estes cabeçalhos estão presentes no pedido HTTP (ou seja, mensagem enviada), são ignorados silenciosamente. Os cabeçalhos HTTP não reconhecidos também são ignorados silenciosamente.

  • Se o valor tiver um formato incorreto, é devolvido um código de estado HTTP adequado ao cliente.

Propriedades da mensagem

As propriedades da mensagem são pares chave-valor definidos pelo utilizador contidos em message.Properties. Para o cliente SBMP espesso, os valores estão restritos a byte, sbyte, , shortchar, ushort, int, uint, long, ulong, float, , decimaldouble, , bool, , Guid, , string, , Uri, , DateTime, , e DateTimeOffsetTimeSpan.

Para REST/HTTP Uri e DateTimeOffset não são suportados (se estiverem no BrokeredMessage, não estão incluídos nos cabeçalhos HTTP). Os tipos de GUID são convertidos em cadeias e TimeSpan os tipos são convertidos em "segundos totais". Devido a estas conversões, perder-se-á o tipo fidelidade. Qualquer nome de propriedade que corresponda ao cabeçalho HTTP restrito (por exemplo, Connection, Expecte assim sucessivamente) também é excluído.

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

prop_name: value  

O tipo de valor é inferido. Se estiver entre aspas duplas, então:

  • Se o conteúdo tiver a forma de uma data/hora RFC2616, o mediador trata-o como um System.DateTime.

  • Caso contrário, o mediador remove as aspas e trata o conteúdo como um System.String.

Se não estiver entre aspas duplas, então:

  1. Se o conteúdo for verdadeiro ou falso (sensível às maiúsculas e minúsculas!), o mediador trata-o como um System.Boolean com o valor correspondente.

  2. Se o conteúdo puder ser analisado como um número inteiro, o mediador trata-o como um System.Int64.

  3. Se o conteúdo puder ser analisado como um número de vírgula flutuante, o mediador trata-o como um System.Double.

  4. Caso contrário, o mediador rejeita a mensagem.

Por exemplo:

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

Corpo da mensagem

Não são efetuadas conversões entre o fluxo do corpo do pedido/resposta HTTP e o BrokerMessage.BodyStream. Além disso, o Content-Type cabeçalho do pedido HTTP é preservado e devolvido ao recetor de mensagens para permitir que a aplicação interprete corretamente os bytes no corpo.

Se a mensagem for criada com o cliente SBMP espesso sem um serializador de objeto xml personalizado, o tipo de conteúdo será predefinido para "application/msbin1", que é o DataContractBinarySerializer, a menos que a aplicação a altere explicitamente (por exemplo, message.ContectType=”application/mytype”) após a criação da mensagem. Este valor de tipo de conteúdo é devolvido ao consumidor de HTTP. É da responsabilidade da aplicação decidir como anular a serialização dos bytes no corpo.

O enlace do Service Bus do WCF define como ContentTypeContentType. Por exemplo, se for utilizado um codificador de mensagens sms, espera-se que seja Content-Type“application/soap+xml”.

Conversão de mensagens

A conversão entre um pedido/resposta HTTP e uma mensagem é realizada no fornecedor de runtime de mensagens HTTP. Os métodos de conversão são aumentados para incluir o mapeamento de cabeçalhos/propriedades na tabela anterior nesta secção e para preservar o tipo de conteúdo da mensagem.