匯出 (0) 列印
全部展開

訊息標頭和屬性

更新日期: 2015年3月

本節描述訊息標頭和屬性。

一個名稱為 BrokerProperties 的 HTTP 標頭包含所有 BrokeredMessage 標頭。這些屬性具有 JSON 格式。因此,可以輕鬆地擴充 BrokeredMessage 屬性。它同時利用易懂的 Web JSON 格式,以符合 Web 程式設計模型。因此,可以輕鬆產生和使用字串剖析較少的訊息屬性。下列是 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“}

下表說明 BrokeredMessage 屬性與 HTTP 標頭的對應方式。

 

BrokeredMessage (SBMP) 部分 類型 HTTP 標頭 協助工具 HTTP 要求/回應

ContentType

字串

Content-Type

get, set

Req, Res

CorrelationId

字串

BrokerProperties{CorrelationId}

get, set

Req, Res

SessionID

字串

BrokerProperties {SessionId}

get, set

Req, Res

DeliveryCount

整數

BrokerProperties {DeliveryCount }

get

Res

LockedUntilUtc

日期時間

BrokerProperties{LockedUntil}

get

Res

LockToken

Guid

BrokerProperties{LockToken}

get

Res

MessageId

字串

BrokerProperties{MessageId}

get, set

Res

Label

字串

BrokerProperties {Label}

get, set

Req, Res

ReplyTo

字串

BrokerProperties {ReplyTo}

get, set

Req, Res

EnqueuedTimeUtc

日期時間

日期

get

Res

SequenceNumber

long

BrokerProperties {SequenceNumber}

get

Res

TimeToLive

TimeSpan

BrokerProperties 集合 {TimeToLive}

get, set

Req, Res

收件者

字串

BrokerProperties {To}

get, set

Req, Res

ScheduledEnqueueTimeUtc

日期時間

BrokerProperties {ScheduledEnqueueTimeUtc}

get, set

Req, Res

ReplyToSessionId

字串

BrokerProperties {ReplyToSessionId}

get, set

Req, Res

附註

  • DateTime 標頭的格式如同 RFC2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3) 所定義。例如,"Sun, 06 Nov 1994 08:49:37 GMT"。

  • BrokerProperties {TimeToLive} 會是 TimeSpan (double) 的秒數。

  • ExpiresAtUtc 沒有對應的 HTTP 標頭,因為它可以衍生自 Date 和 BrokerProperties {TimeToLive}。

  • 具有 get 存取子的訊息標頭只能出現在 HTTP 回應 (即接收的訊息) 中。這些標頭出現在 HTTP 要求 (即傳送的訊息) 中時,則會自動予以忽略。系統也會自動忽略無法識別的 HTTP 標頭。

  • 如果值的格式錯誤,則會將適當的 HTTP 狀態碼傳回給用戶端。

訊息屬性是 message.Properties 中所含的使用者定義金鑰/值配對。若為 SBMP Thick 用戶端,值限制為 byte、sbyte、char、short、ushort、int、uint、long、ulong、float、double、decimal、bool、Guid、string、Uri、DateTime、DateTimeOffset 和 TimeSpan。

若為 REST/HTTP,不支援 Uri 和 DateTimeOffset (如果它們是在 BrokeredMessage 中,則不會包括在 HTTP 標頭中)。Guid 類型會轉換為字串,而 TimeSpan 類型會轉換為「總秒數」。因為這些轉換,將會遺失類型逼真度。系統也會排除任何與受限 HTTP 標頭對應的屬性名稱 (例如,Connection、Expect 等)。

message.Properties 中的每個金鑰/值配對都會對應至下列格式的 HTTP 標頭:

prop_name: value

其中 prop 是金鑰名稱,而 value 是值的字串呈現。

值的類型是推論而來。如果它是用雙引號括住,則:

  • 如果內容的形式為 RFC2616 日期時間,則 Broker 會將它視為 System.DateTime。

  • 否則,Broker 會移除引號,並將內容視為 System.String。

如果它不是用雙引號括住,則:

  1. 如果內容為 true 或 false (區分大小寫),則 Broker 會將它視為具有對應值的 System.Boolean。

  2. 如果內容可以剖析為整數,則 Broker 會將它視為 System.Int64。

  3. 如果內容可以剖析為浮點數,則 Broker 會將它視為 System.Double。

  4. 否則,Broker 會拒絕訊息。

例如:

product: Windows 7 Ultimate
price: 299.98
order-time: Fri, 04 Mar 2011 08:49:37 GMT

HTTP 要求/回應內文串流與 BrokerMessage.BodyStream 之間不會進行轉換。而且,HTTP 要求中的 Content-Type 標頭會保留並傳回給訊息接收者,允許應用程式正確解譯內文中的位元組。

如果訊息是使用沒有自訂 XML 物件序列化程式的 SBMP Thick 用戶端所建立,則除非應用程式在建立訊息之後明確地變更它 (例如,message.ContectType="application/mytype"),否則內容類型會預設為 "application/msbin1" (其為 DataContractBinarySerializer)。此內容類型值會傳回給 HTTP 消費者。這是由應用程式決定如何還原序列化內文中的位元組。

WCF 服務匯流排 繫結會將 ContentType 設定為訊息編碼器的 ContentType。例如,如果使用文字訊息編碼器,則 Content-Type 會預期為 "application/soap+xml"。

HTTP 要求/回應與訊息之間的轉換是在 HTTP 訊息執行階段提供者執行。轉換方法會增強以包括本節前面之表格中的標頭/屬性對應,以及保留訊息的內容類型。

顯示:
© 2015 Microsoft