메시지 헤더 및 속성

이 섹션에서는 메시지 헤더 및 속성에 대해 설명합니다.

메시지 헤더

메시지를 보낼 때 다음 메시지 속성을 지정합니다. 메시지 하나가 전송되거나 수신되는 경우 이 속성은 JSON 인코딩 형식으로 BrokerProperties HTTP 헤더에 포함됩니다. 일괄 처리 메시지가 전송되는 경우 이 속성은 JSON 인코딩 HTTP 본문의 일부입니다. 자세한 내용은 메시지 보내기 및 메시지일괄 처리 보내기를 참조하세요.

다음 표에는 Microsoft.ServiceBus.Messaging.BrokeredMessage 속성이 나와 있습니다 . 속성은 임의의 순서로 표시될 수 있습니다. 속성을 지정하지 않으면 Service Bus는 해당 속성의 기본값을 사용합니다. 목록에 나오지 않은 브로커 속성은 무시됩니다. 허용되는 속성은 지정된 api-version의 값과 관계가 없습니다. api-version 지정자는 HTTP 요청에서 필수가 아닙니다.

SessionIdPartitionKey 속성이 모두 설정되는 경우 두 속성을 같은 값으로 설정해야 합니다.

BrokerProperties라는 HTTP 헤더 하나에 모든 BrokeredMessage 헤더가 포함됩니다. 속성은 JSON 형식입니다. 따라서 BrokeredMessage 속성을 쉽게 확장할 수 있습니다. 또한 이 헤더는 웹용 JSON 형식을 활용하여 웹 프로그래밍 모델에 맞게 조정됩니다. 그러므로 더 적은 문자열 구문 분석을 수행하여 메시지 속성을 쉽게 생성하고 사용할 수 있습니다. 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 Req/Res
ContentType 문자열 콘텐츠 형식 get, set Req, Res
CorrelationId 문자열 BrokerProperties{CorrelationId} get, set Req, Res
SessionID 문자열 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 문자열 BrokerProperties{MessageId} get, set Res
레이블 문자열 BrokerProperties {Label} get, set Req, Res
ReplyTo 문자열 BrokerProperties {ReplyTo} get, set Req, Res
EnqueuedTimeUtc DateTime 날짜 Get Res
SequenceNumber long BrokerProperties {SequenceNumber} Get Res
timeToLive TimeSpan BrokerProperties collection {TimeToLive} get, set Req, Res
대상 문자열 BrokerProperties {To} get, set Req, Res
ScheduledEnqueueTimeUtc DateTime BrokerProperties {ScheduledEnqueueTimeUtc} get, set Req, Res
ReplyToSessionId 문자열 BrokerProperties {ReplyToSessionId} get, set Req, Res
PartitionKey 문자열 BrokerProperties {PartitionKey} get, set Req, Res

이 속성 외에도 사용자 지정 속성을 지정할 수 있습니다. 단일 메시지를 보내거나 받는 경우 각 사용자 지정 속성은 해당하는 고유한 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에는 해당 HTTP 헤더가 없습니다. DateBrokerProperties {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, DateTimeOffsetTimeSpan으로 제한됩니다.

REST/HTTP의 경우 UriDateTimeOffset은 지원되지 않습니다. 이러한 값이 BrokeredMessage에 있는 경우 HTTP 헤더에는 포함되지 않습니다. Guid 형식은 string으로 변환되고 TimeSpan 형식은 "총 시간(초)"으로 변환됩니다. 이러한 변환으로 인해 형식 충실도가 손실됩니다. 제한되는 HTTP 헤더에 해당하는 속성 이름(예: Connection, Expect 등)도 제외됩니다.

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 씩 클라이언트를 사용하여 메시지를 작성하는 경우 콘텐츠 형식은 "application/msbin1"로 기본 지정됩니다. 메시지 작성 후에 응용 프로그램이 명시적으로 변경하는 경우(예: message.ContectType=”application/mytype”)가 아니면 해당 형식은 DataContractBinarySerializer입니다. 이 콘텐츠 형식 값이 HTTP 소비자에게 반환됩니다. 그러면 응용 프로그램이 본문의 바이트를 역직렬화하는 방법을 결정합니다.

WCF Service Bus 바인딩은 를 메시지 인코더의 ContentType로 설정합니다ContentType. 예를 들어 텍스트 메시지 인코더를 사용하는 경우 Content-Type“application/soap+xml”이어야 합니다.

메시지 변환

HTTP 메시징 런타임 공급자가 HTTP 요청/응답과 메시지 간의 변환을 수행합니다. 변환 메서드는 이 섹션 앞부분의 표에 나와 있는 헤더/속성 매핑을 포함하고 메시지의 콘텐츠 형식을 보존하도록 확대됩니다.