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 deDate
eBrokerProperties {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
, , short
char
, ushort
, int
, uint
, long
, ulong
, float
, , decimal
double
, , bool
, , Guid
, , string
, , Uri
, , DateTime
, , e DateTimeOffset
TimeSpan
.
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
, Expect
e 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:
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.Se o conteúdo puder ser analisado como um número inteiro, o mediador trata-o como um System.Int64.
Se o conteúdo puder ser analisado como um número de vírgula flutuante, o mediador trata-o como um
System.Double
.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 ContentType
ContentType
. 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.