CREATE MESSAGE TYPE (Transact-SQL)
Crea un nuovo tipo di messaggio. Il tipo di messaggio definisce il nome di un messaggio e la convalida che viene eseguita da Service Broker nei messaggi con tale nome. In entrambi i lati di una conversazione devono essere definiti gli stessi tipi di messaggio.
Sintassi
CREATE MESSAGE TYPE message_type_name
[ AUTHORIZATION owner_name ]
[ VALIDATION = { NONE
| EMPTY
| WELL_FORMED_XML
| VALID_XML WITH SCHEMA COLLECTION
schema_collection_name
} ]
[ ; ]
Argomenti
message_type_name
Nome del tipo di messaggio da creare. Viene creato un nuovo tipo di messaggio nel database corrente, di proprietà dell'entità specificata nella clausola AUTHORIZATION. Non è possibile specificare i nomi del server, del database e dello schema. Il valore di message_type_name può contenere fino a 128 caratteri.AUTHORIZATION owner_name
Imposta come proprietario del tipo di messaggio l'utente o il ruolo del database specificato. Se l'utente corrente è dbo o sa, owner_name può essere il nome di qualsiasi utente o ruolo valido. In caso contrario, owner_name deve essere il nome dell'utente corrente, il nome di un utente per il quale l'utente corrente dispone dell'autorizzazione IMPERSONATE oppure il nome di un ruolo a cui appartiene l'utente corrente. Se questa clausola viene omessa, il tipo di messaggio appartiene all'utente corrente.VALIDATION
Specifica la modalità con cui Service Broker convalida il corpo dei messaggi di questo tipo. Se questa clausola non viene specificata, l'impostazione predefinita per la convalida è NONE.NONE
Specifica che non viene eseguita alcuna convalida. Il corpo del messaggio può contenere dati oppure può essere NULL.EMPTY
Specifica che il corpo del messaggio deve essere NULL.WELL_FORMED_XML
Specifica che il corpo del messaggio deve contenere codice XML in formato corretto.VALID_XML WITH SCHEMA COLLECTION schema_collection_name
Specifica che il corpo del messaggio deve contenere dati XML conformi a uno schema incluso nell'insieme di schemi specificato. schema_collection_name deve corrispondere al nome di un insieme di schemi XML esistente.
Osservazioni
Service Broker convalida i messaggi in arrivo. Se il corpo di un messaggio non è conforme al tipo di convalida specificato, Service Broker elimina il messaggio non valido e restituisce un errore al servizio che ha inviato il messaggio.
In entrambi i lati di una conversazione deve essere definito lo stesso nome per un tipo di messaggio. Per semplificare la risoluzione dei problemi, per entrambi i lati di una conversazione viene in genere specificata la stessa convalida per il tipo di messaggio, sebbene questo non sia un requisito di Service Broker.
Un tipo di messaggio non può essere un oggetto temporaneo. I nomi dei tipi di messaggio che iniziano con # sono consentiti, ma sono oggetti permanenti.
Autorizzazioni
L'autorizzazione per la creazione di un tipo di messaggio viene assegnata per impostazione predefinita ai membri del ruolo predefinito del database db_ddladmin o db_owner e del ruolo predefinito del server sysadmin.
Per impostazione predefinita l'autorizzazione REFERENCES per un tipo di messaggio viene assegnata al proprietario del tipo di messaggio, ai membri del ruolo predefinito del database db_owner e ai membri del ruolo predefinito del server sysadmin.
Se l'istruzione CREATE MESSAGE TYPE specifica un insieme di schemi, l'utente che esegue l'istruzione deve disporre dell'autorizzazione REFERENCES per l'insieme di schemi specificato.
Esempi
A. Creazione di un tipo di messaggio contenente codice XML ben formato
Nell'esempio seguente viene creato un nuovo tipo di messaggio contenente XML in formato corretto.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = WELL_FORMED_XML ;
B. Creazione di un tipo di messaggio contenente codice XML tipizzato
Nell'esempio seguente viene creato un tipo di messaggio per un rapporto spese in codice XML. In questo esempio viene creato un insieme di schemi XML che contiene lo schema per un semplice rapporto spese. Viene quindi creato un nuovo tipo di messaggio che convalida i messaggi rispetto allo schema.
CREATE XML SCHEMA COLLECTION ExpenseReportSchema AS
N'<?xml version="1.0" encoding="UTF-16" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Adventure-Works.com/schemas/expenseReport"
xmlns:expense="http://Adventure-Works.com/schemas/expenseReport"
elementFormDefault="qualified"
>
<xsd:complexType name="expenseReportType">
<xsd:sequence>
<xsd:element name="EmployeeName" type="xsd:string"/>
<xsd:element name="EmployeeID" type="xsd:string"/>
<xsd:element name="ItemDetail"
type="expense:ItemDetailType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ItemDetailType">
<xsd:sequence>
<xsd:element name="Date" type="xsd:date"/>
<xsd:element name="CostCenter" type="xsd:string"/>
<xsd:element name="Total" type="xsd:decimal"/>
<xsd:element name="Currency" type="xsd:string"/>
<xsd:element name="Description" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ExpenseReport" type="expense:expenseReportType"/>
</xsd:schema>' ;
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = VALID_XML WITH SCHEMA COLLECTION ExpenseReportSchema ;
C. Creazione di un tipo di messaggio per un messaggio vuoto
Nell'esempio seguente viene creato un nuovo tipo di messaggio con codifica vuota.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = EMPTY ;
D. Creazione di un tipo di messaggio contenente dati binari
Nell'esempio seguente viene creato un nuovo tipo di messaggio contenente dati binari. Poiché il messaggio conterrà dati non XML, per il tipo di messaggio viene specificato il tipo di convalida NONE. In questo caso l'applicazione che riceve un messaggio di questo tipo deve verificare che il messaggio contenga dati e che questi siano del tipo previsto.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/ReceiptImage]
VALIDATION = NONE ;