Condividi tramite


Creare un canale usando l'adapter SQL

Nel modello di canale WCF richiamare le operazioni sul database di SQL Server e ricevere i risultati scambiando messaggi SOAP con l'adapter Microsoft BizTalk per SQL Server tramite 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 tramite un IInputChannel per 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 (cliente)

È possibile usare IRequestChannel o IOutputChannel per richiamare le operazioni nel database di SQL Server. In entrambi i casi, prima di tutto si crea un Oggetto System.ServiceModel.ChannelFactory usando l'interfaccia appropriata. Utilizza quindi la fabbrica 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 di SQL Server e l'associazione è un'istanza di sqlBinding.

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

  3. Aprire la fabbrica di canali.

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

  5. Aprire il canale.

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

Specificare il binding e l'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();  

Specificare il binding e l'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 di servizio in entrata

È possibile configurare l'adapter SQL per eseguire il polling delle tabelle e delle viste di database di SQL Server impostando le proprietà di associazione in un'istanza di sqlBinding. Usi quindi questa associazione per creare un listener di canale dal quale è possibile ottenere un canale IInputChannel per ricevere dall'adapter l'operazione Polling, TypedPolling o Notification.

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

  1. Creare un'istanza di SQLBinding.

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

  3. Creare un listener di canale richiamando il metodo BuildChannelListener<IInputChannel> su SQLBinding. Specificare l'URI di connessione di 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 per il canale e ottenere un IInputChannel per ricevere messaggi di modifica dei 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 usando il modello di canale WCF