ここでは、メッセージ ヘッダーとプロパティについて説明します。
メッセージ ヘッダー
メッセージの送信時、メッセージの次のプロパティを指定できます。 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 を保持するように拡張されています。