メッセージ ヘッダーとプロパティ
ここでは、メッセージ ヘッダーとプロパティについて説明します。
メッセージ ヘッダー
メッセージの送信時、メッセージの次のプロパティを指定できます。 1 つのメッセージが送信または受信される場合、これらのプロパティは JSON でエンコードされた形式の BrokerProperties HTTP ヘッダーに含まれます。 メッセージのバッチが送信される場合は、これらのプロパティは JSON でエンコードされた HTTP 本文の一部になります。 詳細については、「メッセージの 送信 」と「 メッセージ バッチの送信」を参照してください。
次の表に、 Microsoft.ServiceBus.Messaging.BrokeredMessage プロパティの 一覧を示します。 このプロパティの順序は任意です。 プロパティが指定されていない場合、Service Bus はそのプロパティの既定値を使用します。 一覧にないブローカー プロパティは無視されます。 承認されたプロパティは、指定された api-version の値からは独立しています。 api-version 指定子は、HTTP 要求に必須ではありません。
SessionId プロパティと PartitionKey プロパティの両方を設定する場合は、同じ値を設定する必要があります。
BrokerProperties
という名前の 1 つの 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) パーツ |
Type | HTTP ヘッダー | ユーザー補助 | 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 |
Label | 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 |
パーティション キー | string | BrokerProperties {PartitionKey} | get、set | Req、Res |
これらのプロパティに加えて、カスタム プロパティを指定できます。 1 つのメッセージが送信または受信される場合、各カスタム プロパティは独自の HTTP ヘッダーに含まれます。 メッセージのバッチが送信される場合は、カスタム プロパティは JSON でエンコードされた HTTP 本文の一部になります。 詳細については、「メッセージの 送信 」と「 メッセージ バッチの送信」を参照してください。
メモ
DateTime
ヘッダーは、RFC2616 で定義されているように書式設定されます: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3。 たとえば、"Sun, 06 Nov 1994 08:49:37 GMT" のようになります。BrokerProperties {TimeToLive} は TimeSpan (double) の秒数です。
ExpiresAtUtc
は、Date
およびBrokerProperties {TimeToLive}
から派生できるため、対応する HTTP ヘッダーがありません。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
はキー名で value
、値の文字列表現です。
prop_name: value
値の型は推測によって決定されます。 二重引用符で囲まれている場合は、次のようになります。
コンテンツに RFC2616 の日時形式が含まれている場合、ブローカーはこれを
System.DateTime
として扱います。それ以外の場合、ブローカーは引用符を削除してコンテンツを
System.String
として扱います。
二重引用符で囲まれていない場合は、次のようになります。
コンテンツが true または false の場合 (大文字と小文字が区別されます)、ブローカーはこれを対応する値を持つ
System.Boolean
として扱います。コンテンツが整数として解析できる場合、ブローカーはこれを System.Int64 として扱います。
コンテンツが浮動小数点数として解析できる場合、ブローカーはこれを
System.Double
として扱います。それ以外の場合、ブローカーはメッセージを拒否します。
例:
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 シック クライアントでメッセージが作成された場合、メッセージの作成後にアプリケーションが明示的に変更しない限り (たとえば、message.ContectType=”application/mytype”
など)、コンテンツ タイプは既定で "application/msbin1" になりますが、これは DataContractBinarySerializer
です。 このコンテンツ タイプの値が、HTTP コンシューマーに返されます。 本文のバイトを逆シリアル化する方法を決めるのは、アプリケーションの役割です。
WCF Service Bus バインドは、 ContentType
をメッセージ エンコーダーの ContentType
に設定します。 たとえば、テキスト メッセージ エンコーダーが使用される場合、Content-Type
は “application/soap+xml”
であると想定されます。
メッセージ変換
HTTP 要求/応答とメッセージの間の変換は、HTTP メッセージ ランタイム プロバイダーで実行されます。 変換方法は、このセクションの表で示したヘッダー/プロパティ マッピングを含み、メッセージの Content-Type を保持するように拡張されています。