Partager via


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é de Date et BrokerProperties {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 :

  1. 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.

  2. Si le contenu peut être analysé en tant qu'entier, le broker le traite en tant que System.Int64.

  3. Si le contenu peut être analysé en tant que nombre à virgule flottante, le broker le traite en tant que System.Double.

  4. 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 ContentTypemessage. 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.