Esporta (0) Stampa
Espandi tutto

Intestazioni e proprietà di un messaggio

Aggiornamento: ottobre 2014

Questa sezione illustra le intestazioni e le proprietà dei messaggi.

In un'intestazione HTTP denominata BrokerProperties sono contenute tutte le intestazioni BrokeredMessage. Le proprietà sono in formato JSON, pertanto è più facile estendere le proprietà BrokeredMessage e allinearsi al modello di programmazione Web sfruttando il formato JSON adatto per il Web. È inoltre più facile produrre e usare proprietà dei messaggi con meno attività di analisi delle stringhe. Di seguito è riportato un esempio di intestazioni 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“}

La seguente tabella illustra come le proprietà BrokeredMessage sono mappate alle intestazioni HTTP.

 

Parti di BrokeredMessage (SBMP) Tipo Intestazione HTTP Accessibilità Req/Res 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

To

string

BrokerProperties {To}

get, set

Req, Res

ScheduledEnqueueTimeUtc

DateTime

BrokerProperties {ScheduledEnqueueTimeUtc}

get, set

Req, Res

ReplyToSessionId

string

BrokerProperties {ReplyToSessionId}

get, set

Req, Res

Note

  • Le intestazioni di tipo DateTime hanno il formato definito da RFC2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3), ad esempio "Sun, 06 Nov 1994 08:49:37 GMT".

  • BrokerProperties {TimeToLive} corrisponderà al numero di secondi relativi a TimeSpan (double).

  • ExpiresAtUtc non ha un'intestazione HTTP corrispondente perché può derivare da Date e BrokerProperties { TimeToLive }.

  • Le intestazioni dei messaggi con una funzione di accesso get possono essere presenti solo nella risposta (Rep) HTTP, ovvero nel messaggio ricevuto. Quando queste intestazioni sono presenti nella richiesta (Req) HTTP, ovvero nel messaggio inviato, vengono ignorate in modo invisibile, così come avviene anche per le intestazioni HTTP non riconosciute.

  • Se il valore non è nel formato corretto, al client viene restituito un codice di stato HTTP appropriato.

Le proprietà dei messaggi sono coppie chiave-valore definite dall'utente contenute in message.Properties. Per il thick client SBMP, i valori possono essere solo di tipo byte, sbyte, char, short, ushort, int, uint, long, ulong, float, double, decimal, bool, Guid, string, Uri, DateTime, DateTimeOffset e TimeSpan.

Per REST/HTTP, Uri e DateTimeOffset non sono supportati (se sono presenti in BrokeredMessage, non vengono inclusi nelle intestazioni HTTP). I tipi Guid vengono convertiti in stringhe e i tipi TimeSpan vengono convertiti in "secondi totali". A causa di queste conversioni, si perde la fedeltà dei tipi. Verrà escluso anche qualsiasi nome di proprietà corrispondente all'intestazione HTTP con restrizioni, ad esempio Connection, Expect e così via.

Ogni coppia chiave-valore presente in message.Properties verrà mappata a un'intestazione HTTP nel seguente formato:

prop_name: value

Dove prop è il nome della chiave e value è la rappresentazione in formato stringa del valore.

Il tipo di valore viene dedotto. Se è delimitato da virgolette, accade quanto segue:

  • Se il contenuto ha il formato di una data/ora RFC2616, il broker lo considera come System.DateTime.

  • Altrimenti il broker rimuove le virgolette e considera il contenuto come System.String.

Se non è delimitato da virgolette, accade quanto segue:

  1. Se il contenuto è true o false (con distinzione tra maiuscole e minuscole), il broker lo considera come System.Boolean con il valore corrispondente.

  2. Se il contenuto può essere analizzato come numero intero (integer), il broker lo considera come System.Int64.

  3. Se il contenuto può essere analizzato come numero a virgola mobile, il broker lo considera come System.Double.

  4. In caso contrario, il broker rifiuta il messaggio.

Ad esempio:

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

Non viene eseguita alcuna conversione tra il flusso del corpo delle richieste/risposte HTTP e BrokerMessage.BodyStream. L'intestazione Content-Type della richiesta HTTP inoltre viene mantenuta e restituita al ricevitore del messaggio per consentire all'applicazione di interpretare correttamente i byte nel corpo.

Se il messaggio viene creato con il thick client SBMP senza un serializzatore di oggetti xml personalizzato, come tipo di contenuto verrà usato per impostazione predefinita "application/msbin1", che corrisponde a DataContractBinarySerializer, a meno che l'applicazione non lo modifichi esplicitamente (ad esempio, come message.ContectType="application/mytype") dopo la creazione del messaggio. Questo valore del tipo di contenuto verrà restituito al consumer HTTP. Spetta all'applicazione decidere come deserializzare i byte nel corpo.

Il binding di Service Bus WCF imposterà ContentType sul valore ContentType del codificatore dei messaggi. Se ad esempio viene usato un codificatore di SMS, Content-Type sarà "application/soap+xml".

La conversione tra una richiesta/risposta HTTP e un messaggio viene eseguita nel provider di runtime della messaggistica HTTP. I metodi di conversione verranno aumentati in modo da includere il mapping intestazione/proprietà della tabella riportata più indietro in questa sezione e per mantenere il tipo di contenuto del messaggio.

Mostra:
© 2014 Microsoft