Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el modelo de canal WCF, se invocan operaciones en la base de datos de SQL Server y se reciben 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 un IInputChannel para las operaciones de 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 de SQL Server. En cualquier caso, primero creas un System.ServiceModel.ChannelFactory utilizando la interfaz adecuada. A continuación, use la fábrica 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
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 de SQL Server y el enlace es una instancia de sqlBinding.
Proporcione las credenciales de SQL Server para el generador de canales mediante la propiedad Credentials .
Abra el generador de canales.
Obtenga una instancia del canal invocando el método CreateChannel en el generador de canales.
Abra el canal.
Puede especificar la dirección de enlace y 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, excepto que debe especificar una interfaz IOutputChannel para el ChannelFactory y el tipo de canal.
// 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 la vinculación 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();
Las opciones de configuración
En el código siguiente se muestran las opciones de configuración usadas 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" en función del 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)
Configuras el adaptador de SQL para sondear las tablas y vistas de la base de datos de SQL Server mediante el establecimiento de propiedades de enlace en una instancia de sqlBinding. Luego, 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
Cree una instancia de SQLBinding.
Establezca las propiedades de vinculación necesarias para la operación entrante. 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 de SQL Server.
Cree un agente de escucha de canal invocando el método IInputChannel> de BuildChannelListener< en SQLBinding. Especifique el URI de conexión de SQL Server como uno de los parámetros para este método.
Abra el agente de escucha.
Obtenga un canal IInputChannel invocando el método AcceptChannel en el agente de escucha.
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 de cambios de 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();