Freigeben über


Erstellen eines Kanals mithilfe von SAP

Im WCF-Kanalmodell rufen Sie Vorgänge im SAP-System auf oder empfangen Nachrichten vom SAP-System, indem Sie SOAP-Nachrichten über einen WCF-Kanal mit dem Microsoft BizTalk-Adapter für mySAP Business Suite austauschen.

  • Sie rufen Vorgänge (ausgehende Vorgänge) auf, indem Sie entweder einen IRequestChannel oder einen IOutputChannel verwenden, um Nachrichten an den Adapter zu senden.

  • Sie erhalten Nachrichten (ausgelöst vom SAP-System) über einen IReplyChannel.

    Die Themen in diesem Abschnitt enthalten Informationen zum Erstellen und Konfigurieren von Kanalformen, 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 im SAP-System aufzurufen. In beiden Fällen erstellen Sie zunächst eine System.ServiceModel.ChannelFactory mithilfe 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 instance von ChannelFactory für das gewünschte Kanal-Shape, indem Sie einen Endpunkt und eine Bindung verwenden. Der Endpunkt gibt einen SAP-Verbindungs-URI an, und die Bindung ist eine instance von SAPDBBinding. (Legen Sie alle bindungseigenschaften fest, die vor dem Öffnen der Kanalfactory erforderlich sind.)

  2. Geben Sie SAP-Anmeldeinformationen für die Kanalfactory mithilfe der ClientCredentials-Eigenschaft an.

  3. Öffnen Sie die Kanalfactory.

  4. Rufen Sie eine instance des Kanals ab, indem Sie die CreateChannel-Methode in 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

Im folgenden Codebeispiel wird gezeigt, 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 die ChannelFactory und den Kanaltyp angeben müssen.

// Create binding -- set binding properties before you open the factory.  
SAPBinding sapBinding = new SAPBinding();  
  
// Create address.  
EndpointAddress sapAddress = new EndpointAddress("sap://Client=800;lang=EN@A/YourSAPHost/00");  
  
// Create channel factory from binding and address.  
ChannelFactory<IRequestChannel> factory =   
    new ChannelFactory<IRequestChannel>(sapBinding, sapAddress);  
  
// Specify credentials.   
factory.Credentials.UserName.UserName = "YourUserName";  
factory.Credentials.UserName.Password = "YourPassword";  
  
// Open the factory  
factory.Open();  
  
// Get channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

Angeben der Bindungs- und Endpunktadresse in der Konfiguration

Das folgende Codebeispiel zeigt, wie Sie eine Kanalfactory aus einem Clientendpunkt erstellen, der in der Konfiguration angegeben ist.

// Create channel factory from configuration.  
ChannelFactory<IRequestChannel> factory =  
new ChannelFactory<IRequestChannel>("MyRequestChannel");  
  
// Specify credentials.  
factory.Credentials.UserName.UserName = "YourUserName";  
factory.Credentials.UserName.Password = "YourPassword";  
  
// 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 abhängig von der Art der Zu erstellenden Kanalform "System.ServiceModel.Channels.IRequestChannel" oder "System.ServiceModel.Channels.IRequestChannel" lauten.

<?xml version="1.0" encoding="utf-8"?>  
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">  
    <system.serviceModel>  
        <bindings>  
            <sapBinding>  
                <binding name="SAPBinding" closeTimeout="00:01:00" openTimeout="00:01:00"  
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" enableBizTalkCompatibilityMode="false"  
                    receiveIdocFormat="Typed" enableSafeTyping="false" generateFlatFileCompatibleIdocSchema="true"  
                    maxConnectionsPerSystem="50" enableConnectionPooling="true"  
                    idleConnectionTimeout="00:15:00" flatFileSegmentIndicator="SegmentDefinition"  
                    enablePerformanceCounters="false" autoConfirmSentIdocs="false"  
                    acceptCredentialsInUri="false"  
                    padReceivedIdocWithSpaces="false" sncLibrary="" sncPartnerName="" />  
            </sapBinding>  
        </bindings>  
        <client>  
            <endpoint address="sap://CLIENT=800;LANG=EN;@a/ADAPSAP47/00?RfcSdkTrace=False&AbapDebug=False"  
                binding="sapBinding" bindingConfiguration="SAPBinding" contract="System.ServiceModel.Channels.IRequestChannel"  
                name="MyRequestChannel" />  
        </client>  
    </system.serviceModel>  
</configuration>  

Erstellen eingehender Kanäle (Dienst)

Sie konfigurieren den Adapter für den Empfang eingehender Nachrichten von einem SAP-System, indem Sie Bindungseigenschaften für eine instance von SAPBinding festlegen. Anschließend verwenden Sie diese Bindung, um einen Kanallistener zu erstellen, über den Sie einen IReplyChannel-Kanal abrufen können, um Vorgänge vom Adapter zu empfangen.

So erstellen und öffnen Sie einen IReplyChannel zum Empfangen von Datenänderungsbenachrichtigungen
  1. Erstellen Sie eine instance von SAPBinding.

  2. Legen Sie alle Bindungseigenschaften fest, die für die Vorgänge erforderlich sind, die Sie empfangen möchten. Achten Sie darauf, die AcceptCredentialsInUri-Bindungseigenschaft festzulegen.

  3. Erstellen Sie eine BindingParameterCollection , und fügen Sie eine InboundActionCollection hinzu, die die Aktionen der Vorgänge enthält, die Sie empfangen möchten. Der Adapter gibt für alle anderen Vorgänge eine Ausnahme für das SAP-System zurück. Dieser Schritt ist optional. Weitere Informationen finden Sie unter Empfangen eingehender Vorgänge vom SAP-System mithilfe des WCF-Kanalmodells.

  4. Erstellen Sie einen Kanallistener, indem Sie die IReplyChannel-Methode BuildChannelListener<> für sapBinding aufrufen. Sie geben den SAP-Verbindungs-URI als einen der Parameter für diese Methode an. Der Verbindungs-URI muss Parameter für ein RFC-Ziel im SAP-System enthalten. Weitere Informationen zum SAP-Verbindungs-URI finden Sie unter Erstellen des SAP-Systemverbindungs-URI. Wenn Sie in Schritt 3 eine BindingParameterCollection erstellt haben, geben Sie dies auch beim Erstellen des Kanallisteners an.

  5. Öffnen Sie den Listener.

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

  7. Öffnen Sie den Kanal.

    Der folgende Code zeigt, wie Sie einen Kanallistener erstellen und einen IReplyChannel abrufen, um Vorgänge vom Adapter zu empfangen.

// Create a binding and specify any binding properties required  
// for the opreations you want to receive  
SAPBinding binding = new SAPBinding();  
  
// Set AcceptCredentialsInUri because the URI must contain credentials.  
binding.AcceptCredentialsInUri = true;  
  
// Create an InboundActionCollection and add the message actions to listen for,  
// only the actions added to the InboundActionCollection are received on the channel.  
// In this case a single action is specified: http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_MKD_ADD  
InboundActionCollection actions = new InboundActionCollection(listeneraddress);  
actions.Add("http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_MKD_ADD");  
  
// Create a BindingParameterCollection and add the InboundActionCollection  
BindingParameterCollection bpcol = new BindingParameterCollection();  
bpcol.Add(actions);  
  
// Create the channel listener by specifying  
// the binding parameter collection (to filter for the Z_RFC_MKD_ADD action) and   
// a connection URI that contains listener parameters.  
Uri listeneraddress =  
new Uri("sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?ListenerGwServ=SAPGATEWAY&ListenerGwHost=YourSAPHost&ListenerProgramId=SAPAdapter");  
listener = binding.BuildChannelListener<IReplyChannel>(connectionUri, new BindingParameterCollection());  
listener.Open();  
  
// Get a channel from the listener and open it.  
channel = listener.AcceptChannel();  
channel.Open();  

Weitere Informationen

Entwickeln von Anwendungen mithilfe des WCF-Kanalmodells