Заголовки и свойства сообщения
В этом разделе описываются заголовки и свойства сообщений.
Заголовки сообщений
При отправке сообщения ему можно задать следующие свойства. Если выполняется отправка или получение одного сообщения, эти свойства содержатся в заголовке HTTP BrokerProperties и закодированы в формате JSON. Если выполняется отправка пакета сообщений, эти свойства содержатся тексте HTTP, закодированном в формате JSON. Дополнительные сведения см. в разделах Отправка сообщения и Отправка пакета сообщений.
В следующей таблице перечислены свойства Microsoft.ServiceBus.Messaging.BrokeredMessage . Свойства могут отображаться в любом порядке. Если свойство не указано, служебная шина использует значение по умолчанию для этого свойства. Свойства посредника, отличные от указанных, игнорируются. Принятые свойства не зависят от значения спецификатора api-version. В запросе HTTP спецификатор api-version не требуется.
Если заданы оба свойства, SessionId и PartitionKey, они должны иметь одно и то же значение.
Один заголовок HTTP с именем BrokerProperties
содержит все заголовки 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.
Части (SBMP)BrokeredMessage |
Тип | Заголовок HTTP | Специальные возможности | HTTP Req/Res |
---|---|---|---|---|
ContentType | строка | Content-Type | 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 | Дата и время | 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 | Дата/время | Date | get | Res |
SequenceNumber | long | BrokerProperties {SequenceNumber} | get | Res |
timeToLive | TimeSpan | BrokerProperties collection {TimeToLive} | get, set | Req, Res |
Кому | строка | BrokerProperties {To} | get, set | Req, Res |
ScheduledEnqueueTimeUtc | Дата и время | BrokerProperties {ScheduledEnqueueTimeUtc} | get, set | Req, Res |
ReplyToSessionId | строка | BrokerProperties {ReplyToSessionId} | get, set | Req, Res |
PartitionKey | строка | BrokerProperties {PartitionKey} | get, set | Req, Res |
Кроме этих свойств можно задать настраиваемые свойства. Если выполняется отправка или получение одного сообщения, каждое настраиваемое свойство помещается в собственный заголовок HTTP. Если выполняется отправка пакета сообщений, настраиваемые свойства содержатся тексте HTTP, закодированном в формате JSON. Дополнительные сведения см. в разделах Отправка сообщения и Отправка пакета сообщений.
Примечания
DateTime
заголовки форматируются в соответствии с определением RFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Например, понедельник, 6 ноября 1994 г., 08:49:37.BrokerProperties {TimeToLive} является количеством секунд TimeSpan (double).
ExpiresAtUtc
не имеет соответствующего заголовка HTTP, поскольку он может быть производным отDate
иBrokerProperties {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
, 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
не выполняется никаких преобразований. Кроме того, заголовок Content-Type
из запроса HTTP сохраняется и возвращается получателю сообщения, позволяя приложению правильно интерпретировать байты в тексте.
Если сообщение создается с помощью толстого клиента SBMP без настраиваемого сериализатора объекта xml, тип содержимого принимает значение по умолчанию application/msbin1, которое является DataContractBinarySerializer
, если только приложение явно не меняет его (например, message.ContectType=”application/mytype”
) после создания сообщения. Значение типа содержимого возвращается потребителю HTTP. Далее приложение решает, как проводить десериализацию байтов в тексте.
Привязка служебной шины WCF задает значение ContentType
для кодировщика ContentType
сообщений. Например, если используется кодировщик текстовых сообщений, Content-Type
должен быть “application/soap+xml”
.
Преобразование сообщений
Преобразование между запросом/ ответом HTTP и сообщением выполняется в поставщике среды обмена сообщениями HTTP. Методы преобразования дополняются, чтобы включить сопоставление заголовка/свойств в таблице, указанной выше в этом разделе, а также сохранить тип содержимого сообщения.