Compartir vía


Creación de un canal mediante el adaptador de SQL

En el modelo de canal WCF, invoca operaciones en la base de datos SQL Server y recibe los resultados intercambiando mensajes SOAP con el adaptador de Microsoft BizTalk para SQL Server a través de un canal WCF.

  • Las operaciones salientes se invocan mediante IRequestChannel o IOutputChannel para enviar mensajes al adaptador.

  • Recibirá mensajes para las operaciones entrantes mediante la recepción de mensajes a través de IInputChannel para las operaciones polling, TypedPolling o Notification .

    Los procedimientos de este tema proporcionan información sobre cómo crear y configurar formas de canal que se usan para las operaciones entrantes y salientes.

Creación de canales de salida (cliente)

Puede usar IRequestChannel o IOutputChannel para invocar operaciones en la base de datos SQL Server. En cualquier caso, primero se crea un System.ServiceModel.ChannelFactory mediante la interfaz adecuada. A continuación, use el generador para crear el canal. Después de crear el canal, puede usarlo para invocar operaciones en el adaptador.

Para crear y abrir un canal de salida

  1. Cree e inicialice una instancia de ChannelFactory para la forma de canal deseada mediante un punto de conexión y un enlace. El punto de conexión especifica un URI de conexión SQL Server y el enlace es una instancia de sqlBinding.

  2. Proporcione SQL Server credenciales para el generador de canales mediante la propiedad Credentials.

  3. Abra el generador de canales.

  4. Obtenga una instancia del canal invocando el método CreateChannel en el generador de canales.

  5. Abra el canal.

    Puede especificar el enlace y la dirección del punto de conexión en el código o desde la configuración.

Especificar el enlace y la dirección del punto de conexión en el código

En el ejemplo de código siguiente se muestra cómo crear un IRequestChannel especificando el enlace y la dirección del punto de conexión en el código. El código para crear un IOutputChannel es el mismo, salvo que debe especificar una interfaz IOutputChannel para el tipo de canal y ChannelFactory .

// Create binding -- set binding properties before you open the factory.  
SqlAdapterBinding sdbBinding = new SqlAdapterBinding();  
  
// Create address.  
EndpointAddress sdbAddress = new EndpointAddress("mssql://<sql_server_name>//<database_name>?");  
  
// Create channel factory from binding and address.  
ChannelFactory<IRequestChannel> factory =   
    new ChannelFactory<IRequestChannel>(sdbBinding, sdbAddress);  
  
// Specify credentials.   
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open factory  
factory.Open();  
  
// Get channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

Especificar el enlace y la dirección del punto de conexión en la configuración

En el ejemplo de código siguiente se muestra cómo crear un generador de canales a partir de un punto de conexión de cliente especificado en la configuración.

// Create channel factory from configuration.  
ChannelFactory<IRequestChannel> factory =  
new ChannelFactory<IRequestChannel>("MyRequestChannel");  
  
// Specify credentials.  
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open the factory.  
factory.Open();  
  
// Get a channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

Opciones de configuración

En el código siguiente se muestran los valores de configuración usados para el ejemplo anterior. El contrato para el punto de conexión de cliente debe ser "System.ServiceModel.Channels.IRequestChannel" o "System.ServiceModel.Channels.IOutputChannel" según el tipo de forma de canal que desee crear.

<?xml version="1.0" encoding="utf-8"?>  
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">  
    <system.serviceModel>  
        <bindings>  
            <sqlBinding>  
                <binding name="SqlAdapterBinding" closeTimeout="00:01:00" openTimeout="00:01:00"  
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" maxConnectionPoolSize="100"  
                    encrypt="false" useAmbientTransaction="true" batchSize="20"  
                    polledDataAvailableStatement="" pollingStatement="" pollingIntervalInSeconds="30"  
                    pollWhileDataFound="false" notificationStatement="" notifyOnListenerStart="true"  
                    enableBizTalkCompatibilityMode="true" chunkSize="4194304"  
                    inboundOperationType="Polling" useDatabaseNameInXsdNamespace="false"  
                    allowIdentityInsert="false" enablePerformanceCounters="false"  
                    xmlStoredProcedureRootNodeName="" xmlStoredProcedureRootNodeNamespace="" />  
            </sqlBinding>  
        </bindings>  
        <client>  
            <endpoint address="mssql://mysqlserver//mydatabase?" binding="sqlBinding"  
                bindingConfiguration="SqlAdapterBinding" contract="System.ServiceModel.Channels.IRequestChannel"  
                name="MyRequestChannel" />  
        </client>  
    </system.serviceModel>  
</configuration>  

Creación de canales entrantes (servicio)

Configure el adaptador de SQL para sondear las tablas y vistas de base de datos de SQL Server estableciendo propiedades de enlace en una instancia de sqlBinding. Después, use este enlace para crear un agente de escucha de canal desde el que puede obtener un canal IInputChannel para recibir la operación Polling, TypedPolling o Notification del adaptador.

Para crear y abrir un IInputChannel para recibir operaciones entrantes

  1. Cree una instancia de SQLBinding.

  2. Establezca las propiedades de enlace necesarias para la operación de entrada. Por ejemplo, para una operación de sondeo, como mínimo, debe establecer las propiedades de enlace InboundOperationType, PolledDataAvailableStatement y PollingStatement para configurar el adaptador de SQL para sondear la base de datos SQL Server.

  3. Cree un agente de escucha de canal invocando el método IInputChannel> BuildChannelListener< en SQLBinding. Especifique el SQL Server URI de conexión como uno de los parámetros de este método.

  4. Abra el agente de escucha.

  5. Obtenga un canal IInputChannel invocando el método AcceptChannel en el agente de escucha.

  6. Abra el canal.

    En el código siguiente se muestra cómo crear un agente de escucha de canal y obtener un IInputChannel para recibir mensajes modificados por datos del adaptador.

Importante

El adaptador de SQL solo admite la recepción unidireccional. Por lo tanto, debe usar IInputChannel para recibir mensajes para las operaciones entrantes de SQL Server.

// Create a binding: specify the InboundOperationType, the PolledDataAvailableStatement, and   
// the PollingStatement binding properties.  
SqlAdapterBinding binding = new SqlAdapterBinding();  
binding.InboundOperationType = InboundOperation.Polling;  
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM EMPLOYEE";  
binding.PollingStatement = "SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000";  
  
// Create a binding parameter collection and set the credentials  
ClientCredentials credentials = new ClientCredentials();  
credentials.UserName.UserName = "myuser";  
credentials.UserName.Password = "mypassword";  
  
BindingParameterCollection bindingParams = new BindingParameterCollection();  
bindingParams.Add(credentials);  
  
// Get a listener from the binding and open it.  
Uri connectionUri = new Uri("mssql://mysqlserver//mydatabase?");  
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);  
listener.Open();  
  
// Get a channel from the listener and open it.  
IInputChannel channel = listener.AcceptChannel();  
channel.Open();  

Consulte también

Desarrollar aplicaciones con el modelo de canal WCF