エクスポート (0) 印刷
すべて展開

メッセージ プロパティと制御

ここでは、メッセージのプロパティとコントロールについて説明します。

メッセージ ヘッダー

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) パーツ 種類 HTTP ヘッダー アクセス方法 HTTP 要求/応答

ContentType

string

コンテンツの種類

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

To

string

BrokerProperties {To}

get、set

Req、Res

ScheduledEnqueueTimeUtc

DateTime

BrokerProperties {ScheduledEnqueueTimeUtc}

get、set

Req、Res

ReplyToSessionId

string

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

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

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

メッセージの変換

HTTP 要求/応答とメッセージの間の変換は、HTTP メッセージ ランタイム プロバイダーで実行されます。変換方法は、前の表のヘッダー/プロパティ マッピングを含み、メッセージの content-type が保存されるように強化される予定です。

コミュニティの追加

追加
表示:
© 2014 Microsoft