CREATE MESSAGE TYPE (Transact-SQL)
Crea un tipo de mensaje nuevo. El tipo de mensaje define el nombre de un mensaje y la validación que Service Broker realiza para los mensajes que tienen dicho nombre. Las dos partes de una conversación deben definir los mismos tipos de mensajes.
Sintaxis
CREATE MESSAGE TYPE message_type_name
[ AUTHORIZATION owner_name ]
[ VALIDATION = { NONE
| EMPTY
| WELL_FORMED_XML
| VALID_XML WITH SCHEMA COLLECTION
schema_collection_name
} ]
[ ; ]
Argumentos
message_type_name
Es el nombre del tipo de mensaje que se va a crear. Se crea un tipo de mensaje nuevo en la base de datos actual, el cual pertenece a la entidad de seguridad especificada en la cláusula AUTHORIZATION. No se pueden especificar nombres de servidor, base de datos o esquema. message_type_name puede contener un máximo de 128 caracteres.AUTHORIZATION owner_name
Establece el propietario del tipo de mensaje en el usuario o función de la base de datos que se ha especificado. Cuando el usuario actual es dbo o sa, owner_name puede ser el nombre de cualquier usuario o función válidos. En caso contrario, owner_name debe ser el nombre del usuario actual, el nombre de un usuario para el que el usuario actual tiene permiso IMPERSONATE o el nombre de una función a la que pertenece el usuario actual. Si se omite esta cláusula, el tipo de mensaje pertenece al usuario actual.VALIDATION
Especifica cómo Service Broker valida el cuerpo del mensaje para mensajes de este tipo. Si no se especifica esta cláusula, el valor predeterminado de la validación es NONE.NONE
Especifica que no se realiza ninguna validación. El cuerpo del mensaje puede contener datos o tener un valor NULL.EMPTY
Especifica que el cuerpo del mensaje debe ser NULL.WELL_FORMED_XML
Especifica que el cuerpo del mensaje debe contener XML correcto.VALID_XML WITH SCHEMA COLLECTION schema_collection_name
Especifica que el cuerpo del mensaje debe contener XML que se ajuste a un esquema de la colección de esquemas especificada. schema_collection_name debe ser el nombre de una colección de esquemas XML existente.
Comentarios
Service Broker valida los mensajes entrantes. Si un mensaje contiene un cuerpo de mensaje que no se ajusta al tipo de validación especificado, Service Broker descarta el mensaje no válido y devuelve un mensaje de error al servicio que ha enviado el mensaje.
Las dos partes de una conversación deben definir el mismo nombre para un tipo de mensaje. Para facilitar la solución de problemas, las dos partes de una conversación suelen especificar la misma validación para el tipo de mensaje, aunque Service Broker no necesita que ambas partes de la conversación utilicen la misma validación.
Un tipo de mensaje no puede ser un objeto temporal. Se permiten los nombres de tipo de mensaje que empiezan por #, aunque se trata de objetos permanentes.
Permisos
De forma predeterminada, tienen permiso para crear un tipo de mensaje los miembros de las funciones fijas de base de datos db_ddladmin o db_owner y la función fija de servidor sysadmin.
El permiso REFERENCES para un tipo de mensaje se concede de forma predeterminada al propietario del tipo de mensaje, a los miembros de la función fija de base de datos db_owner y a los miembros de la función fija de servidor sysadmin.
Si la instrucción CREATE MESSAGE TYPE especifica una colección de esquemas, el usuario que ejecuta la instrucción debe tener el permiso REFERENCES en la colección de esquemas especificada.
Ejemplos
A. Crear un tipo de mensaje que contenga XML correcto
En el siguiente ejemplo se crea un tipo de mensaje que contiene XML correcto.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = WELL_FORMED_XML ;
B. Crear un tipo de mensaje que contenga XML con tipo
En el siguiente ejemplo se crea un tipo de mensaje para un informe de gastos codificado en XML. En el ejemplo se crea una colección de esquemas XML que contiene el esquema de un informe de gastos sencillo. En el ejemplo se crea a continuación un tipo de mensaje nuevo que valida los mensajes en relación con el esquema.
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. Crear un tipo de mensaje para un mensaje vacío
En el siguiente ejemplo se crea un tipo de mensaje con codificación vacía.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = EMPTY ;
D. Crear un tipo de mensaje que contenga datos binarios
En el siguiente ejemplo se crea un tipo de mensaje para incluir datos binarios. Dado que el mensaje contiene datos que no son XML, el tipo de mensaje especifica el tipo de validación NONE. En este caso, debe tener en cuenta que la aplicación que recibe un mensaje de este tipo debe comprobar que el mensaje contiene datos y que dichos datos son del tipo previsto.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/ReceiptImage]
VALIDATION = NONE ;