Información general sobre el modelo de canal WCF con el adaptador de SQL
Para invocar operaciones en el adaptador de Microsoft BizTalk para SQL Server, el código actúa como cliente WCF y envía operaciones salientes al adaptador. En el modelo de canal WCF, el código invoca operaciones en el adaptador mediante el envío de un mensaje de solicitud a través de un canal.
Para recibir mensajes modificados por datos basados en sondeo mediante el adaptador, el código actúa como un servicio WCF y recibe la operación entrante Polling, TypedPolling o Notification del adaptador. En otras palabras, el código recibe un mensaje de solicitud para estas operaciones desde el adaptador a través de un canal.
Los temas de esta sección proporcionan información general sobre el uso del adaptador de SQL con el modelo de canal WCF.
Introducción al modelo de canal WCF
Los clientes y servicios se comunican intercambiando mensajes SOAP. El modelo de canal WCF es una abstracción de bajo nivel de este intercambio de mensajes. Proporciona interfaces y tipos que permiten enviar y recibir mensajes mediante una pila de protocolos superpuestas denominada pila de canales. Cada capa de la pila se compone de un canal y cada canal se crea a partir de un enlace WCF. En la capa más baja se encuentra el canal de transporte. El canal de transporte implementa el mecanismo de transporte subyacente entre un servicio y un cliente y presenta cada mensaje a las capas superiores (y, en última instancia, la aplicación que consume) como System.ServiceModel.Message. La clase Message de WCF es una abstracción de un mensaje SOAP. WCF proporciona varias interfaces de canal, denominadas formas de canal, que modelan los patrones básicos de intercambio de mensajes SOAP, como solicitud-respuesta o unidireccional. Un enlace de transporte WCF proporciona una implementación de una o varias formas de canal que las capas superiores pueden usar para enviar y recibir mensajes. Para obtener más información sobre el modelo de canal WCF, vea Información general sobre el modelo de canal.
El adaptador de SQL es un enlace de transporte personalizado de WCF que expone una base de datos SQL Server como un servicio WCF.
Formas de canal admitidas para el adaptador de SQL Server
El adaptador implementa las siguientes formas de canal WCF:
IRequestChannel (System.ServiceModel.Channels.IRequestChannel). La interfaz IRequestChannel implementa el lado cliente de un intercambio de mensajes de solicitud-respuesta. Puede usar un IRequestChannel para realizar operaciones para las que desea consumir una respuesta, por ejemplo, para realizar una consulta SELECT en una tabla.
IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Esta forma implementa el lado cliente de un intercambio de mensajes unidireccional. Puede usar un IOutputChannel para invocar una operación para la que no es necesario consumir una respuesta, por ejemplo, para llamar a un procedimiento que no tenga parámetros devueltos.
Importante
Todas las llamadas subyacentes realizadas por el adaptador al cliente SQL Server son sincrónicas. Esto incluye llamadas al cliente SQL Server que son el resultado de las operaciones invocadas a través de un IOutputChannel. Cuando se usa un IOutputChannel, el adaptador descarta la respuesta recibida del cliente de SQL Server.
IInputChannel (System.ServiceModel.Channels.IInputChannel). Esta forma implementa el lado del servicio de un intercambio de mensajes unidireccional. Usa un IInputChannel para recibir mensajes para las operaciones entrantes, como sondeo o notificación, desde el adaptador.
Al igual que cualquier enlace WCF, el adaptador de SQL usa un patrón de fábrica para proporcionar canales al código de la aplicación. Se usa un objeto Microsoft.Adapters.SQLBinding para crear instancias de:
System.ServiceModel.ChannelFactory<IRequestChannel> para proporcionar canales IRequestChannel que puede usar para invocar operaciones de solicitud-respuesta en el adaptador.
System.ServiceModel.ChannelFactory<IOutputChannel> para proporcionar canales IOutputChannel que puede usar para invocar operaciones unidireccionales en el adaptador.
System.ServiceModel.IChannelListener<IInputChannel> para proporcionar canales IInputChannel que puede usar para recibir mensajes para operaciones entrantes, como sondeo o notificación, desde el adaptador.
Crear mensajes para el adaptador de base de datos de SQL Server en el modelo de canal WCF
En WCF, la clase System.ServiceModel.Channels.Message proporciona una representación en memoria de un mensaje SOAP. Para crear una instancia de Message , se invoca el método estático Message.Create .
Hay dos partes importantes para el mensaje SOAP que debe especificar al crear una instancia de mensaje para enviar al adaptador de SQL.
La acción del mensaje es una cadena que forma parte del encabezado del mensaje SOAP. La acción de mensaje identifica la operación que se debe invocar en la base de datos. A continuación se muestra la acción de mensaje especificada para invocar la operación Seleccionar en la tabla Employee:
TableOp/Select/dbo/Employee
.El cuerpo del mensaje contiene los datos de parámetro de la operación. El cuerpo del mensaje se compone de XML con formato correcto que corresponde al esquema de mensajes esperado por el adaptador de SQL para la operación solicitada. El cuerpo del mensaje siguiente especifica una operación Select en la tabla Employee (SELECT * FROM Employee WHERE Employee_ID=10001).
<Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <Columns>*</Columns> <Query>where Employee_ID=10001</Query> </Select>
Para obtener información sobre los esquemas de mensajes del adaptador de SQL y las acciones de mensajes para las operaciones, vea Mensajes y esquemas de mensajes para el adaptador de BizTalk para SQL Server.
Este método Create está sobrecargado y ofrece muchas opciones diferentes para proporcionar el cuerpo del mensaje. En el código siguiente se muestra cómo crear una instancia de Message mediante xmlReader para proporcionar el cuerpo del mensaje. En este código, el cuerpo del mensaje se lee de un archivo.
XmlReader readerIn = XmlReader.Create("SelectInput.xml");
Message messageIn = Message.CreateMessage(MessageVersion.Default,
"TableOp/Select/dbo/Employee",
readerIn);
Importante
Debe proporcionar una acción de mensaje en la instancia de Message . Normalmente, esto se hace cuando se crea la instancia de Message .