Berichtkoppen en eigenschappen
In deze sectie worden berichtkoppen en eigenschappen beschreven.
Berichtkoppen
Wanneer u een bericht verzendt, kunt u de volgende berichteigenschappen opgeven. Als er één bericht wordt verzonden of ontvangen, zijn deze eigenschappen opgenomen in de HTTP-header BrokerProperties in een met JSON gecodeerde indeling. Als er een batch berichten wordt verzonden, maken deze eigenschappen deel uit van de MET JSON gecodeerde HTTP-hoofdtekst. Zie Bericht verzenden en Berichtbatch verzenden voor meer informatie.
De volgende tabel bevat de eigenschappen Microsoft.ServiceBus.Messaging.BrokeredMessage . De eigenschappen kunnen in elke gewenste volgorde worden weergegeven. Als er geen eigenschap is opgegeven, gebruikt Service Bus de standaardwaarde voor die eigenschap. Andere brokereigenschappen dan de vermelde eigenschappen worden genegeerd. De geaccepteerde eigenschappen zijn onafhankelijk van de waarde van de opgegeven api-versie. De api-versieaanduiding is niet vereist in de HTTP-aanvraag.
Als de eigenschappen SessionId en PartitionKey beide zijn ingesteld, moeten ze op dezelfde waarde worden ingesteld.
Eén HTTP-header met de BrokeredMessage
naam BrokerProperties
bevat alle headers. De eigenschappen hebben een JSON-indeling. Dit maakt het eenvoudig om de BrokeredMessage
eigenschappen uit te breiden. Het wordt ook afgestemd op het webprogrammeermodel door gebruik te maken van de webvriendelijke JSON-indeling. Hierdoor kunt u eenvoudig berichteigenschappen maken en gebruiken met minder tekenreeksparsering. Hier volgt een voorbeeld van BrokeredMessage
headers:
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“}
In de volgende tabel ziet u hoe BrokeredMessage
eigenschappen worden toegewezen aan HTTP-headers.
BrokeredMessage (SBMP) Delen |
Type | HTTP-header | Toegankelijkheid | HTTP-req/res |
---|---|---|---|---|
Contenttype | tekenreeks | Content-Type | ophalen, instellen | Req, Res |
CorrelationId | tekenreeks | BrokerProperties{CorrelationId} | ophalen, instellen | Req, Res |
SessionID | tekenreeks | BrokerProperties {SessionId} | ophalen, instellen | Req, Res |
DeliveryCount | int | BrokerProperties {DeliveryCount } | ophalen | Res |
LockedUntilUtc | DateTime | BrokerProperties{LockedUntil} | ophalen | Res |
LockToken | Guid | BrokerProperties{LockToken} | ophalen | Res |
Messageid | tekenreeks | BrokerProperties{MessageId} | ophalen, instellen | Res |
Label | tekenreeks | BrokerEigenschappen {Label} | ophalen, instellen | Req, Res |
ReplyTo | tekenreeks | BrokerProperties {ReplyTo} | ophalen, instellen | Req, Res |
EnqueuedTimeUtc | Datum/Tijd | Datum | ophalen | Res |
SequenceNumber | long | BrokerProperties {SequenceNumber} | ophalen | Res |
TimeToLive | TimeSpan | BrokerProperties-verzameling {TimeToLive} | ophalen, instellen | Req, Res |
Tot | tekenreeks | BrokerEigenschappen {To} | ophalen, instellen | Req, Res |
ScheduledEnqueueTimeUtc | DateTime | BrokerProperties {ScheduledEnqueueTimeUtc} | ophalen, instellen | Req, Res |
ReplyToSessionId | tekenreeks | BrokerProperties {ReplyToSessionId} | ophalen, instellen | Req, Res |
PartitionKey | tekenreeks | BrokerEigenschappen {PartitionKey} | ophalen, instellen | Req, Res |
Naast deze eigenschappen kunt u aangepaste eigenschappen opgeven. Als er één bericht wordt verzonden of ontvangen, wordt elke aangepaste eigenschap in een eigen HTTP-header geplaatst. Als er een batch berichten wordt verzonden, maken aangepaste eigenschappen deel uit van de met JSON gecodeerde HTTP-hoofdtekst. Zie Bericht verzenden en Berichtbatch verzenden voor meer informatie.
Opmerkingen
DateTime
headers zijn opgemaakt zoals gedefinieerd door RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Bijvoorbeeld'Sun, 06 Nov 1994 08:49:37 GMT'.BrokerProperties {TimeToLive} is het aantal seconden van de Periode (dubbel).
ExpiresAtUtc
heeft geen bijbehorende HTTP-header omdat deze kan worden afgeleid vanDate
enBrokerProperties {TimeToLive}
.Berichtkoppen met een get accessor kunnen alleen worden weergegeven in het HTTP-antwoord (bijvoorbeeld ontvangen bericht). Wanneer deze headers aanwezig zijn in de HTTP-aanvraag (dat wil gezegd, verzonden bericht), worden ze op de achtergrond genegeerd. Niet-herkende HTTP-headers worden ook op de achtergrond genegeerd.
Als de waarde onjuist is ingedeeld, wordt een geschikte HTTP-statuscode geretourneerd naar de client.
Berichteigenschappen
Berichteigenschappen zijn door de gebruiker gedefinieerde sleutel-waardeparen in message.Properties
. Voor de SBMP-dikke client zijn de waarden beperkt tot byte
, sbyte
, , short
char
, , ushort
, int
, uint
, long
, ulong
, double
float
, decimal
, , bool
, Guid
, , string
, Uri
, DateTime
, , DateTimeOffset
en TimeSpan
.
Voor REST/HTTP Uri
en DateTimeOffset
worden niet ondersteund (als ze zich in de BrokeredMessage
bevinden, worden ze niet opgenomen in de HTTP-headers). GUID-typen worden geconverteerd naar tekenreeksen en TimeSpan
typen worden geconverteerd naar 'totaal aantal seconden'. Als gevolg van deze conversies gaat het type betrouwbaarheid verloren. Elke eigenschapsnaam die overeenkomt met de beperkte HTTP-header (bijvoorbeeld Connection
, Expect
, enzovoort), wordt ook uitgesloten.
Elk sleutel-waardepaar in message.Properties
wordt toegewezen aan een HTTP-header in de volgende indeling.
prop
is de sleutelnaam en value
is de tekenreeksweergave van de waarde:
prop_name: value
Het type waarde wordt afgeleid. Als de aanhalingstekens tussen dubbele aanhalingstekens zijn geplaatst, gaat u als volgt te werk:
Als de inhoud de vorm heeft van een RFC2616-datumtijd, behandelt de broker deze als een
System.DateTime
.Anders verwijdert de broker de aanhalingstekens en behandelt de inhoud als een
System.String
.
Als de aanhalingstekens niet tussen dubbele aanhalingstekens worden geplaatst, gaat u als volgt te werk:
Als de inhoud waar of onwaar is (hoofdlettergevoelig!), behandelt de broker deze als een
System.Boolean
met de bijbehorende waarde.Als de inhoud kan worden geparseerd als een geheel getal, behandelt de broker deze als een System.Int64.
Als de inhoud kan worden geparseerd als een drijvendekommagetal, behandelt de broker deze als een
System.Double
.Anders weigert de broker het bericht.
Bijvoorbeeld:
product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT
Berichttekst
Er worden geen conversies uitgevoerd tussen de http-aanvraag/antwoordbodystream en de BrokerMessage.BodyStream
. De header van de HTTP-aanvraag blijft ook behouden en wordt geretourneerd naar de ontvanger van het bericht, Content-Type
zodat de toepassing de bytes in de hoofdtekst correct kan interpreteren.
Als het bericht is gemaakt met de dikke SBMP-client zonder een aangepaste XML-objectserialisatiefunctie, wordt het inhoudstype standaard ingesteld op 'application/msbin1'. Dit is de DataContractBinarySerializer
, tenzij de toepassing deze expliciet wijzigt (bijvoorbeeld message.ContectType=”application/mytype”
) nadat het bericht is gemaakt. Dit inhoudstype wordt geretourneerd naar de HTTP-consument. Het is de verantwoordelijkheid van de toepassing om te bepalen hoe de bytes in de hoofdtekst moeten worden gedeserialiseerd.
De WCF Service Bus-binding stelt de ContentType
in op de van de encoder van ContentType
het bericht. Als er bijvoorbeeld een tekstberichtcoderingsprogramma wordt gebruikt, wordt verwacht dat de Content-Type
is “application/soap+xml”
.
Berichtconversie
Conversie tussen een HTTP-aanvraag/-antwoord en een bericht wordt uitgevoerd bij de HTTP Messaging Runtime-provider. De conversiemethoden worden uitgebreid met de toewijzing van kopteksten/eigenschappen in de tabel eerder in deze sectie en om het inhoudstype van het bericht te behouden.