メッセージ ヘッダーとプロパティ

ここでは、メッセージ ヘッダーとプロパティについて説明します。

メッセージ ヘッダー

メッセージの送信時、メッセージの次のプロパティを指定できます。 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 シック クライアントの場合、値は bytesbytecharshortushortintuintlongulongfloatdoubledecimalboolGuidstringUriDateTimeDateTimeOffsetTimeSpan に限定されます。

REST/HTTP の場合、UriDateTimeOffset はサポートされません (BrokeredMessage にある場合、HTTP ヘッダーには含まれません)。 GUID 型は文字列に変換され、TimeSpan 型は "合計秒数" に変換されます。 これらの変換のため、型の忠実性は失われます。 制限された HTTP ヘッダーに対応するプロパティ名 (たとえば、ConnectionExpect など) も除外されます。

の各キーと値の message.Properties ペアは、次の形式で HTTP ヘッダーにマップされます。 prop はキー名で value 、値の文字列表現です。

prop_name: 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 ヘッダーは保存され、メッセージ受信側に返されて、アプリケーションは本文のバイトを正しく解釈することができます。

カスタム xml オブジェクト シリアライザーなしに SBMP シック クライアントでメッセージが作成された場合、メッセージの作成後にアプリケーションが明示的に変更しない限り (たとえば、message.ContectType=”application/mytype” など)、コンテンツ タイプは既定で "application/msbin1" になりますが、これは DataContractBinarySerializer です。 このコンテンツ タイプの値が、HTTP コンシューマーに返されます。 本文のバイトを逆シリアル化する方法を決めるのは、アプリケーションの役割です。

WCF Service Bus バインドは、 ContentType をメッセージ エンコーダーの ContentTypeに設定します。 たとえば、テキスト メッセージ エンコーダーが使用される場合、Content-Type“application/soap+xml” であると想定されます。

メッセージ変換

HTTP 要求/応答とメッセージの間の変換は、HTTP メッセージ ランタイム プロバイダーで実行されます。 変換方法は、このセクションの表で示したヘッダー/プロパティ マッピングを含み、メッセージの Content-Type を保持するように拡張されています。