导出 (0) 打印
全部展开

消息标头和属性

更新时间: 2014年10月

本部分介绍消息标头和属性。

一个名为 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

请求、响应

CorrelationId

字符串

BrokerProperties{CorrelationId}

get、set

请求、响应

SessionID

字符串

BrokerProperties {SessionId}

get、set

请求、响应

DeliveryCount

int

BrokerProperties {DeliveryCount }

get

响应

LockedUntilUtc

DateTime

BrokerProperties{LockedUntil}

get

响应

LockToken

Guid

BrokerProperties{LockToken}

get

响应

MessageId

字符串

BrokerProperties{MessageId}

get、set

响应

Label

字符串

BrokerProperties {Label}

get、set

请求、响应

ReplyTo

字符串

BrokerProperties {ReplyTo}

get、set

请求、响应

EnqueuedTimeUtc

DateTime

Date

get

响应

SequenceNumber

long

BrokerProperties {SequenceNumber}

get

响应

TimeToLive

TimeSpan

BrokerProperties collection {TimeToLive}

get、set

请求、响应

收件人

字符串

BrokerProperties {To}

get、set

请求、响应

ScheduledEnqueueTimeUtc

DateTime

BrokerProperties {ScheduledEnqueueTimeUtc}

get、set

请求、响应

ReplyToSessionId

字符串

BrokerProperties {ReplyToSessionId}

get、set

请求、响应

说明

  • DateTime 标头格式参照 RFC2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html) 3.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 胖客户端,值仅限于 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 日期时间格式,则代理会将其视为 System.DateTime。

  • 否则,代理会删除引号并将内容视为 System.String。

如果没有将其用双引号括起来,则:

  1. 如果内容为 true 或 false(区分大小写!),则代理会将其视为具有对应值的 System.Boolean。

  2. 如果内容可以解析为整数,则代理会将其视为 System.Int64。

  3. 如果内容可以解析为浮点数,则代理会将其视为 System.Double。

  4. 否则,代理会拒绝该消息。

例如:

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

HTTP 请求/响应正文流和 BrokerMessage.BodyStream 之间不进行任何转换。另外,HTTP 请求的 Content-Type 标头将保留并返回给消息接收方,这样才能让应用程序正确解释正文中的字节信息。

如果使用 SBMP 胖客户端创建消息时没有使用自定义 xml 对象序列化程序,则内容类型将默认为“application/msbin1”(即 DataContractBinarySerializer),除非在创建消息后应用程序显式更改它(例如,message.ContectType="application/mytype")。此内容类型值将返回给 HTTP 使用者。由应用程序决定如何反序列化正文中的字节。

WCF Service Bus 绑定会将 ContentType 设置为消息编码器的 ContentType。例如,如果使用文本消息编码器,则 Content-Type 应为“application/soap+xml”。

HTTP 请求/响应和消息之间的转换在 HTTP 消息传送运行时提供程序中执行。将增强转换方法,使之包括本部分前面介绍的表中的标头/属性映射,以便保留消息的内容类型。

显示:
© 2014 Microsoft