Freigeben über


Erstellen eines Kanals mithilfe des SQL-Adapters

Im WCF-Kanalmodell rufen Sie Vorgänge in der SQL Server-Datenbank auf und empfangen die Ergebnisse, indem Sie SOAP-Nachrichten mit dem Microsoft BizTalk-Adapter für SQL Server über einen WCF-Kanal austauschen.

  • Sie rufen ausgehende Vorgänge mit einem IRequestChannel oder einem IOutputChannel auf, um Nachrichten an den Adapter zu senden.

  • Sie erhalten Nachrichten für eingehende Vorgänge, indem Sie Nachrichten über einen IInputChannel für Polling-, TypedPolling- oder Benachrichtigungsvorgänge empfangen.

    Die Verfahren in diesem Thema enthalten Informationen zum Erstellen und Konfigurieren von Kanal-Shapes, die für eingehende und ausgehende Vorgänge verwendet werden.

Erstellen ausgehender (Client)-Kanäle

Sie können entweder einen IRequestChannel oder einen IOutputChannel verwenden, um Vorgänge in der SQL Server-Datenbank aufzurufen. In beiden Fällen erstellen Sie zunächst eine System.ServiceModel.ChannelFactory mit der entsprechenden Schnittstelle. Anschließend verwenden Sie die Factory, um den Kanal zu erstellen. Nachdem Sie den Kanal erstellt haben, können Sie ihn verwenden, um Vorgänge auf dem Adapter aufzurufen.

So erstellen und öffnen Sie einen ausgehenden Kanal

  1. Erstellen und initialisieren Sie eine Instanz von ChannelFactory für das gewünschte Kanal-Shape mithilfe eines Endpunkts und einer Bindung. Der Endpunkt gibt einen SQL Server-Verbindungs-URI an, und die Bindung ist eine Instanz von sqlBinding.

  2. Geben Sie SQL Server-Anmeldeinformationen für die Kanalfactory mithilfe der Credentials-Eigenschaft an.

  3. Öffnen Sie die Kanalfabrik.

  4. Rufen Sie eine Instanz des Kanals ab, indem Sie die CreateChannel-Methode auf der Kanalfactory aufrufen.

  5. Öffnen Sie den Kanal.

    Sie können die Bindungs- und Endpunktadresse in Ihrem Code oder aus der Konfiguration angeben.

Angeben der Bindungs- und Endpunktadresse im Code

Das folgende Codebeispiel zeigt, wie Sie einen IRequestChannel erstellen, indem Sie die Bindungs- und Endpunktadresse im Code angeben. Der Code zum Erstellen eines IOutputChannel ist identisch, mit der Ausnahme, dass Sie eine IOutputChannel-Schnittstelle für den ChannelFactory - und Kanaltyp angeben müssen.

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

Angeben der Bindungs- und Endpunktadresse in der Konfiguration

Im folgenden Codebeispiel wird gezeigt, wie Sie eine Kanalfactory von einem in der Konfiguration angegebenen Clientendpunkt erstellen.

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

Die Konfigurationseinstellungen

Der folgende Code zeigt die Konfigurationseinstellungen, die für das vorherige Beispiel verwendet werden. Der Vertrag für den Clientendpunkt muss je nach Art des zu erstellenden Kanal-Shapes "System.ServiceModel.Channels.IRequestChannel" oder "System.ServiceModel.Channels.IOutputChannel" lauten.

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

Erstellen eingehender (Dienst)-Kanäle

Sie konfigurieren den SQL-Adapter, um die SQL Server-Datenbanktabellen und -ansichten abzufragen, indem Sie Bindungseigenschaften für eine Instanz von sqlBinding festlegen. Sie verwenden danach diese Bindung, um einen Kanallistener zu erstellen, aus dem Sie einen IInputChannel abrufen können, um die Abfrage-, TypedPolling- oder Benachrichtigung-Operation vom Adapter zu empfangen.

So erstellen und öffnen Sie einen IInputChannel zum Empfangen eingehender Vorgänge

  1. Erstellen Sie eine Instanz von SQLBinding.

  2. Legen Sie die Bindungseigenschaften fest, die für eingehende Operationen erforderlich sind. Für einen Abrufvorgang müssen Sie beispielsweise mindestens die Bindungseigenschaften "InboundOperationType", "PolledDataAvailableStatement" und " PollingStatement " festlegen, um den SQL-Adapter so zu konfigurieren, dass die SQL Server-Datenbank abgefragt wird.

  3. Erstellen Sie einen Kanallistener durch Aufrufen der BuildChannelListener<IInputChannel-Methode> für die SQLBinding-Methode. Sie geben den SQL Server-Verbindungs-URI als einen der Parameter für diese Methode an.

  4. Öffnen Sie den Listener.

  5. Rufen Sie einen IInputChannel-Kanal ab, indem Sie die AcceptChannel-Methode auf dem Listener aufrufen.

  6. Öffnen Sie den Kanal.

    Der folgende Code zeigt, wie Sie einen Kanalabhörer erstellen und einen IInputChannel abrufen, um Datenänderungsnachrichten vom Adapter zu empfangen.

Von Bedeutung

Der SQL-Adapter unterstützt nur unidirektionale Empfangswege. Sie müssen also IInputChannel verwenden, um Nachrichten für eingehende Vorgänge von SQL Server zu empfangen.

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

Siehe auch

Entwickeln von Anwendungen mithilfe des WCF-Kanalmodells