Nagłówki komunikatów i właściwości

W tej sekcji opisano nagłówki i właściwości komunikatów.

Nagłówki komunikatów

Podczas wysyłania komunikatu można określić następujące właściwości komunikatu. Jeśli jeden komunikat jest wysyłany lub odbierany, te właściwości są zawarte w nagłówku HTTP BrokerProperties w formacie zakodowanym w formacie JSON. Jeśli zostanie wysłana partia komunikatów, te właściwości są częścią treści HTTP zakodowanej w formacie JSON. Aby uzyskać więcej informacji, zobacz Wysyłanie komunikatów i wysyłanie wiadomości wsadowych.

W poniższej tabeli wymieniono właściwości Microsoft.ServiceBus.Messaging.BrokeredMessage . Właściwości mogą być wyświetlane w dowolnej kolejności. Jeśli właściwość nie jest określona, usługa Service Bus używa wartości domyślnej dla tej właściwości. Właściwości brokera inne niż wymienione są ignorowane. Zaakceptowane właściwości są niezależne od wartości określonej wersji interfejsu API. Specyfikator wersji interfejsu API nie jest wymagany w żądaniu HTTP.

Jeśli właściwości SessionId i PartitionKey są ustawione, muszą być ustawione na tę samą wartość.

Jeden nagłówek HTTP o nazwie BrokerProperties zawiera wszystkie BrokeredMessage nagłówki. Właściwości są sformatowane w formacie JSON. Ułatwia to rozszerzanie BrokeredMessage właściwości. Ponadto jest on zgodny z modelem programowania internetowego, wykorzystując przyjazny dla Internetu format JSON. Dzięki temu można łatwo tworzyć i wykorzystywać właściwości komunikatów z mniejszym analizowaniem ciągów. Oto przykład nagłówków 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“}  

W poniższej tabeli przedstawiono sposób BrokeredMessage mapowania właściwości na nagłówki HTTP.

BrokeredMessage (SBMP) Części Typ Nagłówek HTTP Ułatwienia dostępu HTTP Req/Res
Contenttype ciąg Content-Type get, set Req, Res
CorrelationId ciąg BrokerProperties{CorrelationId} get, set Req, Res
SessionID ciąg BrokerProperties {SessionId} get, set Req, Res
Liczba dostaw int BrokerProperties {DeliveryCount } get Res
LockedUntilUtc DateTime BrokerProperties{LockedUntil} get Res
Blokada tokenu Guid (identyfikator GUID) BrokerProperties{LockToken} get Res
Messageid ciąg BrokerProperties{MessageId} get, set Res
Etykieta ciąg BrokerProperties {Label} get, set Req, Res
Replyto ciąg BrokerProperties {ReplyTo} get, set Req, Res
EnqueuedTimeUtc Data i godzina Data get Res
SequenceNumber długi BrokerProperties {SequenceNumber} get Res
TimeToLive przedział_czasu Kolekcja BrokerProperties {TimeToLive} get, set Req, Res
Działanie ciąg BrokerProperties {To} get, set Req, Res
ScheduledEnqueueTimeUtc DateTime BrokerProperties {ScheduledEnqueueTimeUtc} get, set Req, Res
ReplyToSessionId ciąg BrokerProperties {ReplyToSessionId} get, set Req, Res
PartitionKey ciąg BrokerProperties {PartitionKey} get, set Req, Res

Oprócz tych właściwości można określić właściwości niestandardowe. Jeśli pojedynczy komunikat zostanie wysłany lub odebrany, każda właściwość niestandardowa zostanie umieszczona we własnym nagłówku HTTP. Jeśli zostanie wysłana partia komunikatów, właściwości niestandardowe są częścią treści HTTP zakodowanej w formacie JSON. Aby uzyskać więcej informacji, zobacz Wysyłanie komunikatów i wysyłanie wiadomości wsadowych.

Uwagi

  • DateTime nagłówki są formatowane zgodnie z definicją WFC2616: https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3. Na przykład "Sun, 06 nov 1994 08:49:37 GMT".

  • BrokerProperties {TimeToLive} to liczba sekund przedziału czasu (dwukrotnie).

  • ExpiresAtUtc nie ma odpowiedniego nagłówka HTTP, ponieważ może pochodzić z Date elementów i BrokerProperties {TimeToLive}.

  • Nagłówki komunikatów z metodą pobierania mogą pojawiać się tylko w odpowiedzi HTTP (na przykład odebrany komunikat). Gdy te nagłówki są obecne w żądaniu HTTP (tj. wysyłanym komunikacie), są one dyskretnie ignorowane. Nierozpoznane nagłówki HTTP są również ignorowane w trybie dyskretnym.

  • Jeśli wartość jest źle sformułowana, odpowiedni kod stanu HTTP jest zwracany do klienta.

Właściwości komunikatu

Właściwości komunikatu to pary klucz-wartość zdefiniowane przez użytkownika zawarte w pliku message.Properties. W przypadku klienta o grubości SBMP wartości są ograniczone do byte, sbyte, char, DateTimeulonglongfloatuintdoubleintdecimalboolushortshortstringUriGuidDateTimeOffseti .TimeSpan

W przypadku protokołu REST/HTTP Uri i DateTimeOffset nie są obsługiwane (jeśli znajdują się w elemecie BrokeredMessage, nie są uwzględnione w nagłówkach HTTP). Typy identyfikatorów GUID są konwertowane na ciągi, a TimeSpan typy są konwertowane na "łączną liczbę sekund". Z powodu tych konwersji zostanie utracona wierność typu. Każda nazwa właściwości odpowiadająca ograniczonemu nagłówkowi HTTP (na przykład , ConnectionExpect, itd.) jest również wykluczona.

Każda para klucz-wartość w pliku message.Properties zostanie zamapowana na nagłówek HTTP w następującym formacie. prop jest nazwą klucza i value jest ciągiem reprezentującym wartość:

prop_name: value  

Typ wartości jest wnioskowany. Jeśli jest otoczony podwójnym cudzysłowem, wówczas:

  • Jeśli zawartość ma postać daty RFC2616, broker traktuje go jako System.DateTime.

  • W przeciwnym razie broker usuwa cudzysłowy i traktuje zawartość jako System.String.

Jeśli nie jest otoczony podwójnym cudzysłowem, wówczas:

  1. Jeśli zawartość ma wartość true lub false (uwzględniana jest wielkość liter!), broker traktuje ją jako wartość System.Boolean z odpowiednią wartością.

  2. Jeśli zawartość może być analizowana jako liczba całkowita, broker traktuje ją jako System.Int64.

  3. Jeśli zawartość może być analizowana jako liczba zmiennoprzecinkowa, broker traktuje ją jako System.Double.

  4. W przeciwnym razie broker odrzuca komunikat.

Przykład:

product: Windows 7 Ultimate  
price: 299.98  
order-time: Fri, 04 Mar 2011 08:49:37 GMT  

Treść wiadomości

Żadne konwersje nie są wykonywane między strumieniem treści żądania HTTP/odpowiedzi a elementem BrokerMessage.BodyStream. Content-Type Ponadto nagłówek żądania HTTP jest zachowywany i zwracany do odbiornika komunikatów, aby umożliwić aplikacji poprawne interpretowanie bajtów w treści.

Jeśli komunikat zostanie utworzony z grubym klientem SBMP bez niestandardowego serializatora obiektów XML, typ zawartości będzie domyślnie "application/msbin1", czyli DataContractBinarySerializer, chyba że aplikacja jawnie zmieni go (na przykład message.ContectType=”application/mytype”) po utworzeniu komunikatu. Ta wartość typu zawartości jest zwracana do odbiorcy HTTP. Obowiązkiem aplikacji jest podjęcie decyzji, jak deserializować bajty w treści.

Powiązanie usługi Service Bus WCF ustawia ContentType element na koder komunikatów ContentType. Jeśli na przykład jest używany koder komunikatów tekstowych, oczekiwana Content-Type“application/soap+xml”wartość to .

Konwersja komunikatów

Konwersja między żądaniem/odpowiedzią HTTP a komunikatem jest wykonywana u dostawcy środowiska uruchomieniowego obsługi komunikatów HTTP. Metody konwersji są rozszerzone w celu uwzględnienia mapowania nagłówka/właściwości w tabeli we wcześniejszej części tej sekcji oraz zachowania typu zawartości komunikatu.