Hlavičky a vlastnosti zpráv
Tato část popisuje hlavičky a vlastnosti zpráv.
Záhlaví zpráv
Při odesílání zprávy můžete zadat následující vlastnosti zprávy. Pokud je odeslána nebo přijata jedna zpráva, jsou tyto vlastnosti obsaženy v hlavičce PROTOKOLU HTTP BrokerProperties ve formátu kódování JSON. Pokud se odešle dávka zpráv, jsou tyto vlastnosti součástí textu HTTP s kódováním JSON. Další informace najdete v tématu Odeslání zprávy a Odeslání dávky zpráv.
Následující tabulka uvádí vlastnosti Microsoft.ServiceBus.Messaging.BrokeredMessage . Vlastnosti se můžou zobrazit v libovolném pořadí. Pokud vlastnost není zadána, service Bus použije výchozí hodnotu pro danou vlastnost. Vlastnosti zprostředkovatele jiné než uvedené jsou ignorovány. Akceptované vlastnosti jsou nezávislé na hodnotě zadané verze rozhraní API. Specifikátor api-version se v požadavku HTTP nevyžaduje.
Pokud jsou vlastnosti SessionId a PartitionKey nastavené, musí být nastaveny na stejnou hodnotu.
Jedna hlavička HTTP s názvem BrokerProperties
obsahuje všechny BrokeredMessage
hlavičky. Vlastnosti jsou ve formátu JSON. To usnadňuje rozšíření BrokeredMessage
vlastností. Také se zarovná s webovým programovacím modelem pomocí formátu JSON, který je vhodný pro web. To usnadňuje vytváření a využívání vlastností zprávy s menším parsováním řetězců. Následuje příklad BrokeredMessage
hlaviček:
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“}
Následující tabulka ukazuje, jak BrokeredMessage
se vlastnosti mapují na hlavičky HTTP.
BrokeredMessage (SBMP) Části |
Typ | Hlavička HTTP | Usnadnění | HTTP Req/Res |
---|---|---|---|---|
Contenttype | řetězec | Typ obsahu | get, set | Req, Res |
CorrelationId | řetězec | BrokerProperties{CorrelationId} | get, set | Req, Res |
SessionID | řetězec | BrokerProperties {SessionId} | get, set | Req, Res |
DeliveryCount | int | BrokerProperties {DeliveryCount } | get | Res |
LockedUntilUtc | DateTime | BrokerProperties{LockedUntil} | get | Res |
LockToken | Identifikátor GUID | BrokerProperties{LockToken} | get | Res |
Messageid | řetězec | BrokerProperties{MessageId} | get, set | Res |
Popisek | řetězec | BrokerProperties {Label} | get, set | Req, Res |
Odpovědět | řetězec | BrokerProperties {ReplyTo} | get, set | Req, Res |
EnqueuedTimeUtc | Datum a čas | Datum | get | Res |
SequenceNumber | long | BrokerProperties {SequenceNumber} | get | Res |
TimeToLive | TimeSpan | Kolekce BrokerProperties {TimeToLive} | get, set | Req, Res |
Záměr | řetězec | BrokerVlastnosti {To} | get, set | Req, Res |
ScheduledEnqueueTimeUtc | DateTime | BrokerProperties {ScheduledEnqueueTimeUtc} | get, set | Req, Res |
ReplyToSessionId | řetězec | BrokerProperties {ReplyToSessionId} | get, set | Req, Res |
PartitionKey | řetězec | Vlastnosti zprostředkovatele {PartitionKey} | get, set | Req, Res |
Kromě těchto vlastností můžete zadat vlastní vlastnosti. Pokud je odeslána nebo přijata jedna zpráva, každá vlastní vlastnost se umístí do vlastní hlavičky HTTP. Pokud se odešle dávka zpráv, vlastní vlastnosti jsou součástí těla HTTP kódovaného ve formátu JSON. Další informace najdete v tématu Odeslání zprávy a Dávka odeslání zprávy.
Poznámky
DateTime
hlavičky jsou formátovány podle definice RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Například "Sun, 06 Nov 1994 08:49:37 GMT".BrokerProperties {TimeToLive} je počet sekund timespanu (dvojnásobek).
ExpiresAtUtc
nemá odpovídající hlavičku HTTP, protože ji lze odvodit zDate
aBrokerProperties {TimeToLive}
.Hlavičky zpráv s objektem get accessor se můžou zobrazit jenom v odpovědi HTTP (například v přijaté zprávě). Pokud jsou tyto hlavičky v požadavku HTTP (tj. odeslané zprávě), jsou tiše ignorovány. Nerozpoznané hlavičky HTTP se také tiše ignorují.
Pokud je hodnota poškozena, vrátí se klientovi odpovídající stavový kód HTTP.
Vlastnosti zprávy
Vlastnosti zprávy jsou uživatelem definované páry klíč-hodnota obsažené v message.Properties
. Pro silného klienta SBMP jsou hodnoty omezené na byte
, sbyte
, , char
, short
, ushort
, uint
int
, long
, ulong
, float
Guid
bool
decimal
double
, , string
, Uri
, DateTime
DateTimeOffset
a TimeSpan
.
Pro REST/HTTP Uri
a DateTimeOffset
se nepodporují (pokud jsou v BrokeredMessage
, nejsou zahrnuté v hlavičkách HTTP). Typy GUID se převedou na řetězce a TimeSpan
typy se převedou na "total seconds" (celkový počet sekund). V důsledku těchto převodů dojde ke ztrátě věrnosti typu. Je také vyloučený jakýkoli název vlastnosti, který odpovídá omezené hlavičce HTTP (například Connection
, Expect
atd.).
Každý pár klíč-hodnota v nástroji message.Properties
se namapuje na hlavičku HTTP v následujícím formátu.
prop
je název klíče a value
je řetězcovou reprezentací hodnoty:
prop_name: value
Odvozuje se typ hodnoty. Pokud je uzavřena dvojitými uvozovkami, pak:
Pokud má obsah formu data a času RFC2616, pak zprostředkovatel ho považuje za
System.DateTime
.V opačném případě zprostředkovatel uvozovky odebere a zachází s obsahem jako s
System.String
.
Pokud není uzavřen do dvojitých uvozovek, pak:
Pokud je obsah pravdivý nebo nepravda (rozlišují se malá a velká písmena),pak zprostředkovatel s ním zachází jako
System.Boolean
s odpovídající hodnotou.Pokud lze obsah analyzovat jako celé číslo, pak zprostředkovatel s ním zachází jako s System.Int64.
Pokud je možné obsah analyzovat jako číslo s plovoucí desetinou čárkou, pak zprostředkovatel s ním zachází jako
System.Double
s .V opačném případě zprostředkovatel zprávu odmítne.
Příklad:
product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT
Text zprávy
Mezi streamem textu požadavku/odpovědi HTTP a datovým proudem BrokerMessage.BodyStream
se neprovádí žádné převody. Hlavička Content-Type
požadavku HTTP je také zachována a vrácena příjemci zprávy, aby aplikace mohla správně interpretovat bajty v těle.
Pokud je zpráva vytvořena pomocí sbmp silného klienta bez vlastního serializátoru xml objektu, typ obsahu bude ve výchozím nastavení "application/msbin1", což je DataContractBinarySerializer
, pokud aplikace explicitně nezmění (například message.ContectType=”application/mytype”
) po vytvoření zprávy. Tato hodnota typu obsahu se vrátí příjemci HTTP. Je zodpovědností aplikace rozhodnout, jak deserializovat bajty v těle.
Vazba služby WCF Service Bus nastaví ContentType
na kodér ContentType
zpráv . Pokud se například používá kodér textových zpráv, očekává se, Content-Type
že hodnota bude “application/soap+xml”
.
Převod zpráv
Převod mezi požadavkem/odpovědí HTTP a zprávou se provádí u poskytovatele modulu runtime zasílání zpráv HTTP. Metody převodu jsou rozšířeny tak, aby zahrnovaly mapování hlaviček a vlastností v tabulce dříve v této části a aby se zachoval typ obsahu zprávy.