Condividi tramite


Creare un canale usando l'adapter SQL

Nel modello di canale WCF richiamare le operazioni sul database SQL Server e ricevere i risultati scambiando messaggi SOAP con l'adapter Microsoft BizTalk per SQL Server su un canale WCF.

  • Per richiamare le operazioni in uscita, usare IRequestChannel o IOutputChannel per inviare messaggi all'adapter.

  • Si ricevono messaggi per le operazioni in ingresso ricevendo messaggi su un IInputChannel per le operazioni di polling, TypedPolling o Notification .

    Le procedure descritte in questo argomento forniscono informazioni su come creare e configurare forme di canale utilizzate per le operazioni in ingresso e in uscita.

Creazione di canali in uscita (client)

È possibile usare IRequestChannel o IOutputChannel per richiamare le operazioni sul database SQL Server. In entrambi i casi, creare prima di tutto system.ServiceModel.ChannelFactory usando l'interfaccia appropriata. Usare quindi la factory per creare il canale. Dopo aver creato il canale, è possibile usarlo per richiamare le operazioni sull'adapter.

Per creare e aprire un canale in uscita

  1. Creare e inizializzare un'istanza di ChannelFactory per la forma del canale desiderata usando un endpoint e un'associazione. L'endpoint specifica un URI di connessione SQL Server e l'associazione è un'istanza di sqlBinding.

  2. Specificare SQL Server credenziali per la channel factory usando la proprietà Credentials.

  3. Aprire la channel factory.

  4. Ottenere un'istanza del canale richiamando il metodo CreateChannel nella channel factory.

  5. Aprire il canale.

    È possibile specificare l'associazione e l'indirizzo dell'endpoint nel codice o dalla configurazione.

Specifica dell'associazione e dell'indirizzo dell'endpoint nel codice

Nell'esempio di codice seguente viene illustrato come creare un IRequestChannel specificando l'associazione e l'indirizzo dell'endpoint nel codice. Il codice per creare un IOutputChannel è lo stesso, ad eccezione del fatto che è necessario specificare un'interfaccia IOutputChannel per ChannelFactory e il tipo di canale.

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

Specifica dell'associazione e dell'indirizzo dell'endpoint nella configurazione

Nell'esempio di codice seguente viene illustrato come creare una channel factory da un endpoint client specificato nella configurazione.

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

Impostazioni di configurazione

Il codice seguente illustra le impostazioni di configurazione usate per l'esempio precedente. Il contratto per l'endpoint client deve essere "System.ServiceModel.Channels.IRequestChannel" o "System.ServiceModel.Channels.IOutputChannel" a seconda del tipo di forma del canale che si desidera creare.

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

Creazione di canali in ingresso (servizio)

Configurare l'adattatore SQL per eseguire il polling delle tabelle e delle viste del database SQL Server impostando le proprietà di associazione in un'istanza di sqlBinding. Usare quindi questa associazione per creare un listener del canale da cui è possibile ottenere un canale IInputChannel per ricevere l'operazione polling, TypedPolling o Notification dall'adapter.

Per creare e aprire un IInputChannel per ricevere le operazioni in ingresso

  1. Creare un'istanza di SQLBinding.

  2. Impostare le proprietà di associazione necessarie per l'operazione in ingresso. Per un'operazione di polling, ad esempio, è necessario impostare almeno le proprietà di associazione InboundOperationType, PolledDataAvailableStatement e PollingStatement per configurare l'adattatore SQL per eseguire il polling del database SQL Server.

  3. Creare un listener del canale richiamando il metodo IInputChannelChannel<in>SQLBinding. Specificare l'URI di connessione SQL Server come uno dei parametri per questo metodo.

  4. Aprire il listener.

  5. Ottenere un canale IInputChannel richiamando il metodo AcceptChannel nel listener.

  6. Aprire il canale.

    Il codice seguente illustra come creare un listener del canale e ottenere un IInputChannel per ricevere messaggi modificati dai dati dall'adapter.

Importante

L'adapter SQL supporta solo la ricezione unidirezionale. È quindi necessario usare IInputChannel per ricevere messaggi per le operazioni in ingresso da 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();  

Vedere anche

Sviluppare applicazioni tramite il modello di canale WCF