Condividi tramite


Creare un canale con SAP

Nel modello di canale WCF richiamare le operazioni nel sistema SAP o ricevere messaggi dal sistema SAP scambiando messaggi SOAP con l'adapter Microsoft BizTalk per mySAP Business Suite tramite un canale WCF.

  • È possibile richiamare le operazioni (operazioni in uscita) usando IRequestChannel o IOutputChannel per inviare messaggi all'adapter

  • Si ricevono messaggi (attivati dal sistema SAP) su IReplyChannel.

    Negli argomenti di questa sezione vengono fornite informazioni su come creare e configurare forme di canale usate per le operazioni in ingresso e in uscita.

Creazione di canali in uscita (client)

È possibile usare IRequestChannel o IOutputChannel per richiamare le operazioni nel sistema SAP. 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 SAP e l'associazione è un'istanza di SAPDBBinding. Impostare le proprietà di associazione necessarie prima di aprire la channel factory.

  2. Specificare le credenziali SAP per la channel factory usando la proprietà ClientCredentials .

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

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 = "YourUserName";  
factory.Credentials.UserName.Password = "YourPassword";  
  
// 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.IRequestChannel" 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>  
            <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>  

Creazione di canali in ingresso (servizio)

Per configurare l'adapter per ricevere messaggi in ingresso da un sistema SAP, impostare le proprietà di associazione in un'istanza di SAPBinding. Usare quindi questa associazione per creare un listener del canale da cui è possibile ottenere un canale IReplyChannel per ricevere le operazioni dall'adapter.

Per creare e aprire un IReplyChannel per ricevere notifiche modificate dei dati
  1. Creare un'istanza di SAPBinding.

  2. Impostare le proprietà di associazione necessarie per le operazioni che si desidera ricevere. Assicurarsi di impostare la proprietà di associazione AcceptCredentialsInUri .

  3. Creare un oggetto BindingParameterCollection e aggiungere un oggetto InboundActionCollection contenente le azioni delle operazioni che si desidera ricevere. L'adattatore restituirà un'eccezione al sistema SAP per tutte le altre operazioni. Questo passaggio è facoltativo. Per altre informazioni, vedere Ricezione di operazioni in ingresso dal sistema SAP tramite il modello di canale WCF.

  4. Creare un listener del canale richiamando il metodo IReplyChannelListener<> in SAPBinding. Specificare l'URI di connessione SAP come uno dei parametri per questo metodo. L'URI di connessione deve contenere parametri per una destinazione RFC nel sistema SAP. Per altre informazioni sull'URI di connessione SAP, vedere Creare l'URI di connessione di sistema SAP. Se è stato creato un oggetto BindingParameterCollection nel passaggio 3, è necessario specificare questo valore anche quando si crea il listener del canale.

  5. Aprire il listener.

  6. Ottenere un canale IReplyChannel richiamando il metodo AcceptChannel nel listener.

  7. Aprire il canale.

    Il codice seguente illustra come creare un listener del canale e ottenere un IReplyChannel per ricevere le operazioni dall'adapter.

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

Vedere anche

Sviluppare applicazioni tramite il modello di canale WCF