Udostępnij za pośrednictwem


CREATE MESSAGE TYPE (Transact-SQL)

Tworzy nowy typ komunikatu.Typ komunikatu określa nazwę komunikatu oraz zakres sprawdzania poprawności wykonywanego przez program Service Broker na komunikatach o tej nazwie.Po obu stronach konwersacji musi być zdefiniowany ten sam typ komunikatu.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • message_type_name
    Nazwa typu komunikatu, który ma zostać utworzony.Nowy typ komunikatu jest tworzony w bieżącej bazie danych. Jego właścicielem staje się podmiot zabezpieczeń określony w klauzuli AUTHORIZATION.Nie można określać nazw serwera, bazy danych i schematu.Wartość parametru message_type_name może zawierać do 128 znaków.

  • autoryzacja owner_name
    Określa, że właścicielem typu komunikatu jest wskazany użytkownik lub rola bazy danych.Jeśli bieżącym użytkownikiem jest właściciel bazy danych lub administrator systemu, wartością parametru owner_name może być nazwa dowolnego prawidłowego użytkownika lub roli.W przeciwnym wypadku parametr owner_name musi być nazwą bieżącego użytkownika, nazwą użytkownika, w odniesieniu do którego bieżący użytkownik ma uprawnienie IMPERSONATE, lub nazwą roli, którą posiada bieżący użytkownik.W przypadku pominięcia tej klauzuli właścicielem typu komunikatu jest bieżący użytkownik.

  • VALIDATION
    Określa, jak program Service Broker sprawdza poprawność treści tego typu komunikatów.Jeśli klauzula nie zostanie określona, domyślnie jest przyjmowana wartość NONE.

  • BRAK
    Określa, że nie jest wykonywane żadne sprawdzanie poprawności.Treść komunikatu może zawierać dowolne dane albo stanowić wartość NULL.

  • PUSTE
    Określa, że treść komunikatu musi stanowić wartość NULL.

  • WELL_FORMED_XML
    Określa, że treść komunikatu musi zawierać poprawnie sformułowany kod XML.

  • schema_collection_nameTokeny te są następujące:
    Określa, że treść wiadomości może zawierać XML, który jest zgodny ze schematem w kolekcja określony schemat schema_collection_name musi być nazwą istniejącą kolekcja schematu XML.

Remarks

Program Service Broker sprawdza poprawność przychodzących komunikatów.Jeśli komunikat zawiera treść niezgodną z ustawieniem sprawdzania poprawności, program Service Broker odrzuca go, a do usługi, z której został wysłany komunikat, zwraca komunikat o błędzie.

Po obu stronach konwersacji musi być zdefiniowany ten sam typ komunikatu.Aby ułatwić rozwiązywanie ewentualnych problemów, po obu stronach konwersacji jest zazwyczaj skonfigurowane to samo ustawienie sprawdzania poprawności typu komunikatu, chociaż program Service Broker tego nie wymaga.

Typem komunikatu nie może być obiekt tymczasowy.Nazwy typów komunikatów rozpoczynające się znakiem # są dozwolone, ale są obiektami trwałymi.

Uprawnienia

Uprawnienie do tworzenia wartości domyślnych dla członków typ komunikatu db_ddladmin or db_owner stałe role bazy danych i sysadmin stała rola serwera.

Domyślnie uprawnienie materiały referencyjne dla typu komunikatu do właściciela tego typ komunikatu, członkowie db_owner stałe rola bazy danych i członkowie sysadmin ustalić roli serwera.

Zakończ pracę z sukcesu

Przykłady

A.Zakończ pracę z błędem

Przejdź do następnego kroku

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

B.Przejdź do kroku

W przykładzie poniżej następuje utworzenie typu komunikatu dla sprawozdania o wydatkach mającego format XML.Powstaje kolekcja schematów XML zawierająca schemat prostego sprawozdania.Następnie jest tworzony nowy typ komunikatu, który odpowiada za sprawdzanie poprawności komunikatów ze schematem.

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.Tworzenie typu komunikatu bez treści

W przykładzie poniżej następuje utworzenie nowego typu komunikatu, który nie zawiera żadnej treści.

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

D.Tworzenie typu komunikatu zawierającego dane binarne

W przykładzie poniżej następuje utworzenie nowego typu komunikatu, w którym będą umieszczone dane binarne.Ponieważ komunikat będzie zawierał dane, które nie są w formacie XML, dla typu wiadomości określono ustawienie sprawdzania poprawności NONE.Należy pamiętać, że w tej sytuacji aplikacja otrzymująca tego typu komunikat musi sprawdzić, czy komunikat zawiera dane oraz czy są one odpowiedniego typu.

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