En-têtes et propriétés des messages
Cette section décrit les en-têtes et les propriétés des messages.
En-têtes de message
Quand vous envoyez un message, vous pouvez spécifier les propriétés du message suivantes. Si un seul message est envoyé ou reçu, ces propriétés sont contenues dans l'en-tête HTTP BrokerProperties dans un format en code JSON. Si un lot de messages est envoyé, ces propriétés font partie du corps HTTP en code JSON. Pour plus d’informations, consultez Envoyer un message et Envoyer un lot de messages.
Le tableau suivant répertorie les propriétés Microsoft.ServiceBus.Messaging.BrokeredMessage . Les propriétés peuvent s'afficher dans n'importe quel ordre. Si aucune propriété n’est spécifiée, Service Bus utilise la valeur par défaut pour cette propriété. Les propriétés de Service Broker autres que celles répertoriées sont ignorées. Les propriétés acceptées sont indépendantes de la valeur de la version de l'API spécifiée. Le spécificateur de la version de l'API n'est pas requis dans la requête HTTP.
Si les propriétés SessionId et PartitionKey sont toutes deux définies, elles doivent avoir la même valeur.
Un en-tête HTTP nommé BrokerProperties
contient tous les en-têtes BrokeredMessage
. Les propriétés sont au format JSON. Cela facilite l'extension des propriétés BrokeredMessage
. De plus, l'exploitation du format convivial JSON respecte le modèle de programmation web. Cela facilite la production et la consommation des propriétés des messages avec une analyse des chaînes moins importante. Voici un exemple d'en-têtes 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“}
Le tableau suivant décrit la manière dont les propriétés BrokeredMessage
sont mappées vers les en-têtes HTTP.
Éléments BrokeredMessage (SBMP) |
Type | En-tête HTTP | Accessibilité | Req/Res HTTP |
---|---|---|---|---|
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 |
Étiquette | 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 | BrokerProperties collection {TimeToLive} | get, set | Req, Res |
À | 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 |
Outre ces propriétés, vous pouvez spécifier des propriétés personnalisées. Si un seul message est envoyé ou reçu, chaque propriété personnalisée est placée dans son propre en-tête HTTP. Si un lot de messages est envoyé, les propriétés personnalisées font partie du corps HTTP en code JSON. Pour plus d’informations, consultez Envoyer un message et Envoyer un lot de messages.
Remarques
DateTime
Les en-têtes sont mis en forme comme défini par RFC2616 : https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Par exemple, « Dim, 06 Nov 1994 08:49:37 GMT ».BrokerProperties {TimeToLive} correspond au nombre de secondes du TimeSpan (double).
ExpiresAtUtc
n'a pas d'en-tête HTTP correspondant, car il peut être dérivé deDate
etBrokerProperties {TimeToLive}
.Les en-têtes de message ayant un accesseur get peuvent apparaître uniquement dans la réponse HTTP (par exemple, message reçu). Lorsque ces en-têtes sont présents dans la demande HTTP (c'est-à-dire le message envoyé), ils sont ignorés de manière silencieuse. Les en-têtes HTTP non reconnus sont également ignorés en silence.
Si la valeur présente un format incorrect, un code d'état HTTP approprié est renvoyé au client.
Propriétés de message
Les propriétés des messages sont des paires clé-valeur définies par l'utilisateur et contenues dans message.Properties
. Pour le client épais SBMP, les valeurs sont limitées à byte
, sbyte
, char
, short
, ushort
, int
, uint
, long
, ulong
, float
, double
, decimal
, bool
, Guid
, string
, Uri
, DateTime
, DateTimeOffset
et TimeSpan
.
Pour REST/HTTP, Uri
et DateTimeOffset
ne sont pas pris en charge (s'ils sont dans le BrokeredMessage
, ils ne sont pas inclus dans les en-têtes HTTP). Les types GUID sont convertis en chaînes, et les types TimeSpan
sont convertis en « secondes totales ». En raison de ces conversions, la fidélité du type est perdue. Tout nom de propriété correspondant à l'en-tête HTTP limité (par exemple, Connection
, Expect
, etc.) est également exclu.
Chaque paire clé-valeur dans message.Properties
est mappée à un en-tête HTTP au format suivant.
prop
est le nom de la clé et value
est la représentation sous forme de chaîne de la valeur :
prop_name: value
Le type de valeur est déduit. S'il est entouré de doubles guillemets, alors :
Si le contenu a la forme d'une date-heure au format RFC2616, le broker le traite en tant que
System.DateTime
.Autrement, le broker supprime les guillemets et traite le contenu en tant que
System.String
.
S'il n'est pas entouré de doubles guillemets, alors :
Si le contenu a une valeur « true » ou « false » (respectant la casse), le broker le traite en tant que
System.Boolean
avec la valeur correspondante.Si le contenu peut être analysé en tant qu'entier, le broker le traite en tant que System.Int64.
Si le contenu peut être analysé en tant que nombre à virgule flottante, le broker le traite en tant que
System.Double
.Sinon, le broker rejette le message.
Par exemple :
product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT
Corps du message
Aucune conversion n'est réalisée entre le flux du corps de la demande/réponse HTTP et le BrokerMessage.BodyStream
. De plus, l'en-tête Content-Type
de la demande HTTP est conservé et renvoyé au récepteur du message pour permettre à l'application d'interpréter correctement les octets dans le corps.
Si le message est créé avec le client épais SBMP sans sérialiseur d'objet xml personnalisé, le type de contenu par défaut est « application/msbin1 », soit le DataContractBinarySerializer
, sauf si l'application le change explicitement (par exemple, message.ContectType=”application/mytype”
) après la création du message. Cette valeur de type de contenu est renvoyée au client HTTP. Il revient à l'application de décider comment désérialiser les octets dans le corps.
La liaison WCF Service Bus définit sur la ContentType
valeur de l’encodeur de ContentType
message. Par exemple, si un codeur de message texte est utilisé, le Content-Type
doit être “application/soap+xml”
.
Conversion de message
La conversion entre une demande/réponse HTTP et un message est réalisée sur le fournisseur d'exécution de messagerie HTTP. Les méthodes de conversion sont étendues pour inclure le mappage de l'en-tête/des propriétés dans le tableau présenté plus haut dans cette section, et pour conserver le type de contenu du message.