CREATE MESSAGE TYPE (Transact-SQL)

Crée un nouveau type de message. Un type de message définit le nom d'un message et la validation effectuée par Service Broker sur les messages portant ce nom. Les deux parties d'une conversation doivent définir les mêmes types de messages.

Icône Lien de rubriqueConventions de la syntaxe Transact-SQL

Syntaxe

CREATE MESSAGE TYPE message_type_name
    [ AUTHORIZATION owner_name ]
    [ VALIDATION = {  NONE
                    | EMPTY 
                    | WELL_FORMED_XML
                    | VALID_XML WITH SCHEMA COLLECTION 
                                                    schema_collection_name
                   } ]
[ ; ]

Arguments

  • message_type_name
    Nom du type de message à créer. Un nouveau type de message est créé dans la base de données active et possédé par le serveur principal spécifié dans la clause AUTHORIZATION. Les noms du serveur, de la base de données et du schéma ne peuvent pas être spécifiés. L'argument message_type_name peut comporter jusqu'à 128 caractères.

  • AUTHORIZATION owner_name
    Définit le propriétaire du type de message sur l'utilisateur ou le rôle de base de données spécifié. Lorsque l'utilisateur actuel est dbo ou sa, l'argument owner_name peut prendre le nom de n'importe quel utilisateur ou rôle valide. Dans le cas contraire, owner_name doit être le nom de l'utilisateur actif, le nom d'un utilisateur pour lequel l'utilisateur actif possède l'autorisation IMPERSONATE, ou le nom d'un rôle auquel appartient l'utilisateur actif. Lorsque cette clause est ignorée, le type de message appartient à l'utilisateur actuel.

  • VALIDATION
    Spécifie comment Service Broker valide le corps des messages de ce type. Lorsque cette clause n'est pas spécifiée, la validation par défaut est NONE.

  • NONE
    Spécifie qu'aucune validation n'est réalisée. Le corps du message peut contenir des données ou avoir la valeur NULL.

  • EMPTY
    Spécifie que le corps du message doit avoir la valeur NULL.

  • WELL_FORMED_XML
    Spécifie que le corps du message doit contenir du code XML correct.

  • VALID_XML WITH SCHEMA COLLECTION schema_collection_name
    Spécifie que le corps du message doit contenir du code XML conforme à un schéma de la collection de schémas spécifiée. L'argument schema_collection_name doit représenter le nom d'une collection de schémas XML existante.

Notes

Service Broker valide les messages entrants. Lorsqu'un message contient un corps de message non conforme au type de validation spécifié, Service Broker ignore le message non valide et retourne un message d'erreur au service émetteur du message.

Les deux parties d'une conversation doivent définir le même nom pour un type de message. Pour faciliter le dépannage, les deux parties d'une conversation spécifient généralement la même validation pour le type de message, bien que Service Broker ne l'impose pas.

Il est possible qu'un type de message ne soit pas un objet temporaire. Les noms de type de message commençant par # sont autorisés, mais ils représentent des objets permanents.

Autorisations

L'autorisation de création d'un type de message est accordée par défaut aux membres des rôles de base de données fixes db_ddladmin ou db_owner et du rôle serveur fixe sysadmin.

L'autorisation REFERENCES pour un type de message est accordée par défaut au propriétaire du type de message, aux membres du rôle de base de données fixe db_owner et aux membres du rôle serveur fixe sysadmin.

Lorsque l'instruction CREATE MESSAGE TYPE spécifie une collection de schémas, l'utilisateur exécutant l'instruction doit disposer d'une autorisation REFERENCES sur la collection de schémas spécifiée.

Exemples

A. Création d'un type de message contenant du code XML correct

L'exemple suivant crée un type de message contenant du code XML correct.

  CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/SubmitExpense]
    VALIDATION = WELL_FORMED_XML ;   

B. Création d'un type de message contenant du code XML typé

L'exemple suivant crée un type de message pour un rapport de frais codé en XML. L'exemple crée une collection de schémas XML contenant le schéma d'un rapport de frais simple. L'exemple crée ensuite un type de message qui valide les messages par rapport au schéma.

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. Création d'un type de message pour un message vide

L'exemple suivant crée un type de message avec un codage vide.

 CREATE MESSAGE TYPE
     [//Adventure-Works.com/Expenses/SubmitExpense]
     VALIDATION = EMPTY ;

D. Création d'un type de message contenant des données binaires

L'exemple suivant crée un type de message qui contient des données binaires. Étant donné que le message contient des données non XML, le type de message spécifie le type de validation NONE. Notez que dans ce cas, l'application qui reçoit un message de ce type doit vérifier que le message contient des données et que ces dernières sont du type attendu.

CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/ReceiptImage]
    VALIDATION = NONE ;