Partager via


Créer un canal à l’aide de l’adaptateur SQL

Dans le modèle de canal WCF, vous appelez des opérations sur la base de données SQL Server et vous recevez les résultats en échangeant des messages SOAP avec l’adaptateur Microsoft BizTalk pour SQL Server sur un canal WCF.

  • Vous appelez des opérations sortantes à l’aide d’un IRequestChannel ou d’un IOutputChannel pour envoyer des messages à l’adaptateur.

  • Vous recevez des messages pour les opérations entrantes en recevant des messages sur un IInputChannel pour les opérations d’interrogation, de typedPolling ou de notification .

    Les procédures décrites dans cette rubrique fournissent des informations sur la création et la configuration des formes de canal utilisées pour les opérations entrantes et sortantes.

Création de canaux sortants (client)

Vous pouvez utiliser un IRequestChannel ou un IOutputChannel pour appeler des opérations sur la base de données SQL Server. Dans les deux cas, vous créez d’abord un System.ServiceModel.ChannelFactory à l’aide de l’interface appropriée. Vous utilisez ensuite la fabrique pour créer le canal. Une fois que vous avez créé le canal, vous pouvez l’utiliser pour appeler des opérations sur l’adaptateur.

Pour créer et ouvrir un canal sortant

  1. Créez et initialisez un instance de ChannelFactory pour la forme de canal souhaitée à l’aide d’un point de terminaison et d’une liaison. Le point de terminaison spécifie un URI de connexion SQL Server et la liaison est une instance de sqlBinding.

  2. Fournissez SQL Server informations d’identification pour la fabrique de canaux à l’aide de la propriété Credentials.

  3. Ouvrez la fabrique de canal.

  4. Obtenez une instance du canal en appelant la méthode CreateChannel sur la fabrique de canal.

  5. Ouvrez le canal.

    Vous pouvez spécifier la liaison et l’adresse de point de terminaison dans votre code ou à partir de la configuration.

Spécification de la liaison et de l’adresse de point de terminaison dans le code

L’exemple de code suivant montre comment créer un IRequestChannel en spécifiant la liaison et l’adresse de point de terminaison dans le code. Le code permettant de créer un IOutputChannel est le même, sauf que vous devez spécifier une interface IOutputChannel pour le channelFactory et le type 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();  

Spécification de la liaison et de l’adresse de point de terminaison dans la configuration

L’exemple de code suivant montre comment créer une fabrique de canaux à partir d’un point de terminaison client spécifié dans la configuration.

// 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();  

Paramètres de configuration

Le code suivant montre les paramètres de configuration utilisés pour l’exemple précédent. Le contrat du point de terminaison client doit être « System.ServiceModel.Channels.IRequestChannel » ou « System.ServiceModel.Channels.IOutputChannel » en fonction du type de forme de canal que vous souhaitez créer.

<?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>  

Création de canaux entrants (de service)

Vous configurez l’adaptateur SQL pour interroger les tables et vues de base de données SQL Server en définissant des propriétés de liaison sur un instance de sqlBinding. Vous utilisez ensuite cette liaison pour créer un écouteur de canal à partir duquel vous pouvez obtenir un canal IInputChannel pour recevoir l’opération Polling, TypedPolling ou Notification de l’adaptateur.

Pour créer et ouvrir un IInputChannel pour recevoir des opérations entrantes

  1. Créez un instance de SQLBinding.

  2. Définissez les propriétés de liaison requises pour l’opération entrante. Par exemple, pour une opération d’interrogation, vous devez au minimum définir les propriétés de liaison InboundOperationType, PolledDataAvailableStatement et PollingStatement pour configurer l’adaptateur SQL pour interroger la base de données SQL Server.

  3. Créez un écouteur de canal en appelant la méthode BuildChannelListener<IInputChannel> sur sqlBinding. Vous spécifiez l’URI de connexion SQL Server comme l’un des paramètres de cette méthode.

  4. Ouvrez l’écouteur.

  5. Obtenez un canal IInputChannel en appelant la méthode AcceptChannel sur l’écouteur.

  6. Ouvrez le canal.

    Le code suivant montre comment créer un écouteur de canal et obtenir un IInputChannel pour recevoir des messages modifiés de données à partir de l’adaptateur.

Important

L’adaptateur SQL prend uniquement en charge la réception unidirectionnel. Par conséquent, vous devez utiliser IInputChannel pour recevoir des messages pour les opérations 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();  

Voir aussi

Développer des applications en utilisant le modèle de canal WCF