Panoramica del modello di servizio WCF con l'adapter SAP
Quando si utilizzano le operazioni visualizzate dall'adapter Microsoft BizTalk per mySAP Business Suite, il codice funge da client o servizio per l'adapter.
Il codice funge da client per richiamare i tipi di operazioni seguenti nel sistema SAP:
Richiamare una chiamata di funzione remota (RFC).
Richiamare una chiamata di funzione remota transazionale (tRFC).
Richiamare un'interfaccia bapi (Business Application Programming Interface).
Inviare un documento intermedio (IDOC)
Il codice funge da servizio per ricevere i tipi di operazioni seguenti:
Ricevere un RFC (server RFC)
Ricevere un TRFC (server tRFC)
Ricevere un IDOC.
Nota
Poiché i BAPI sono metodi esposti dal sistema SAP negli oggetti business che si trovano nel repository di oggetti business (BOR), non è possibile ricevere bapi.
Nel modello di servizio Windows Communication Foundation (WCF), il contratto di servizio esistente tra un client e un servizio è rappresentato come interfaccia .NET e le operazioni sono rappresentate come metodi in questa interfaccia. L'adapter SAP e WCF forniscono strumenti che consentono di generare questa interfaccia per le operazioni di destinazione dai metadati esposti dall'adattatore. Questi strumenti creano anche una classe client WCF che può essere usata per richiamare le operazioni esposte nell'interfaccia del servizio. Un'applicazione client può chiamare i metodi della classe client WCF per richiamare le operazioni sull'adapter. Per implementare un servizio per ricevere operazioni dall'adattatore SAP, implementare l'interfaccia generata per l'operazione di destinazione.
Le sezioni seguenti illustrano come usare il modello di servizio WCF per creare il codice client e del servizio per l'adapter SAP.
Creazione di un client WCF e chiamata di operazioni in SAP
Per usare il modello di servizio WCF per richiamare le operazioni sull'adattatore SAP, è necessario innanzitutto generare una classe client WCF per le operazioni di destinazione. È quindi possibile creare un'istanza di questa classe, un client WCF e chiamarne i metodi per eseguire operazioni sul sistema SAP.
Per richiamare operazioni sull'adapter SAP
Generare una classe client WCF e un codice helper. Usare il plug-in Add Adapter Service Reference di Visual Studio o lo Strumento utilità metadati ServiceModel (svcutil.exe) per generare una classe client WCF destinata agli artefatti di sistema SAP con cui si desidera funzionare. Per altre informazioni su come generare un client WCF, vedere Generare un client WCF o un contratto di servizio WCF per gli artefatti della soluzione SAP.
Creare un'istanza client WCF specificando un'associazione client. La specifica di un'associazione client comporta la specifica dell'associazione e dell'indirizzo dell'endpoint che verrà usato dal client WCF. È possibile eseguire questa operazione in modo imperativo nel codice o in modo dichiarativo nella configurazione. Per altre informazioni su come specificare un'associazione client, vedere Configurare un'associazione client per il sistema SAP. Il codice seguente crea un client WCF che può essere usato per richiamare un RFC nel sistema SAP. Imposta anche le credenziali per il sistema SAP. Il client WCF viene inizializzato dalla configurazione.
RfcClient rfcClient = new RfcClient("SAPBinding_Rfc"); rfcClient.ClientCredentials.UserName.UserName = "YourUserName"; rfcClient.ClientCredentials.UserName.Password = "YourPassword";
Aprire il client WCF.
rfcClient.Open();
Richiamare i metodi nel client WCF creato nel passaggio 2 per eseguire operazioni sul sistema SAP. Il codice seguente richiama il metodo SD_RFC_CUSTOMER_GET del client WCF per richiamare il RFC nel sistema SAP.
microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers = new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0]; rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);
Chiudere il client WCF.
rfcClient.Close();
Creazione e implementazione di un servizio WCF tramite l'adapter SAP
Per usare il modello di servizio WCF per ricevere operazioni dall'adattatore SAP, è necessario innanzitutto generare l'interfaccia .NET (denominata anche contratto di servizio WCF) che rappresenta il contratto di servizio esposto dall'adapter SAP per l'operazione. Per altre informazioni su come eseguire questa operazione, vedere Generare un client WCF o un contratto di servizio WCF per gli artefatti della soluzione SAP.
Si implementa quindi un servizio WCF implementando l'interfaccia generata. Questa classe contiene la logica di business per elaborare l'operazione e restituire una risposta all'adattatore. Usare quindi un host del servizio (System.ServiceModel.ServiceHost) per ospitare un'istanza di questo servizio.
Per creare e implementare un servizio WCF
Generare un contratto di servizio WCF e classi helper. Usare il plug-in Aggiungi riferimento al servizio adapter o svcutil.exe per generare un contratto di servizio WCF (interfaccia) destinato agli artefatti di sistema SAP con cui si desidera lavorare. Per altre informazioni su come generare un client WCF, vedere Generare un client WCF o un contratto di servizio WCF per gli artefatti della soluzione SAP.
Implementare un servizio WCF dalle classi di interfaccia e helper generate nel passaggio 1. Se si verifica un errore durante l'elaborazione dei dati per l'operazione, il metodo che gestisce tale operazione può generare un'eccezione per restituire un errore al sistema SAP; in caso contrario, il metodo deve restituire un'istanza della classe di risposta appropriata (generata) per l'operazione. È necessario attribuire la classe del servizio WCF come indicato di seguito:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
Se è stato usato il plug-in Add Adapter Service Reference per generare l'interfaccia, è possibile implementare la logica direttamente nel metodo appropriato nella classe SAPBindingService generata. Questa classe è disponibile in SAPBindingService.cs. La sottoclasse di codice seguente esegue la classe SAPBindingService .
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,UseSynchronizationContext = false)] class RfcServerClass : SAPBindingNamespace.SAPBindingService { public override Z_RFC_MKD_ADDResponse Z_RFC_MKD_ADD(Z_RFC_MKD_ADDRequest request) { // If either parameter is null throw an exception if (request.X == null || request.Y == null) throw new System.ArgumentNullException(); // Add the two operands int result = (int) (request.X + request.Y); return new Z_RFC_MKD_ADDResponse(result); } }
Se è stato usato svcutil.exe per generare l'interfaccia, è necessario creare una classe che implementa l'interfaccia e implementare la logica nel metodo appropriato di questa classe.
Creare un'istanza del servizio WCF creato nel passaggio 2.
// create service instance RfcServerClass rfcServerInstance = new RfcServerClass();
Creare un'istanza di System.ServiceModel.ServiceHost usando il servizio WCF e un URI di connessione di base. L'URI di connessione di base non può contenere userinfoparams o un query_string.
// Enable service host Uri[] baseUri = new Uri[] { new Uri("sap://a/YourSAPHost/00") }; ServiceHost srvHost = new ServiceHost(pollingInstance, baseUri);
Creare un SAPBinding e configurarlo per l'operazione impostandone le proprietà di associazione. È possibile eseguire questa operazione in modo esplicito nel codice o in modo dichiarativo nella configurazione. È necessario impostare almeno AcceptCredentialsInUri su true.
// Create and configure a binding for the service endpoint. NOTE: binding // parameters are set here for clarity, but these are already set in the // the generated configuration file SAPBinding binding = new SAPBinding(); // The credentials are included in the connection URI, so set this property to true binding.AcceptCredentialsInUri = true;
Aggiungere un endpoint di servizio all'host del servizio. Per eseguire questa operazione:
Usare l'associazione creata nel passaggio 5.
Specificare un URI di connessione contenente le credenziali e specifica una connessione al listener (gateway SAP, servizio gateway e ID programma) nel query_string. Per altre informazioni sull'URI di connessione SAP, vedere Creare l'URI di connessione di sistema SAP.
Specificare il contratto di servizio. Nome dell'interfaccia che rappresenta il contratto di servizio WCF. Per le RFC, è "Rfc".
// Add service endpoint // NOTE: The contract for the service endpoint is "Rfc". // This is the generated WCF service contract (interface) -- see SAPBindingInterface.cs. Uri serviceUri = new Uri("sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?ListenerGwServ=SAPGW00&ListenerGwHost=YourSapHost&ListenerProgramId=SAPAdapter"); srvHost.AddServiceEndpoint("Rfc", binding, serviceUri);
Per ricevere l'operazione dal sistema SAP, aprire l'host del servizio. Il servizio WCF verrà richiamato ogni volta che il sistema SAP richiama l'operazione sull'ID programma e sul sistema specificato nell'URI del servizio nel passaggio 6.
// Open the service host to begin receiving the operation. srvHost.Open();
Per interrompere la ricezione dell'operazione, chiudere l'host del servizio.
Importante
L'adapter continuerà a ricevere l'operazione fino alla chiusura dell'host del servizio. È consigliabile chiudere sempre l'host del servizio quando non si vuole più ricevere l'operazione.
srvHost.Close();
Vedere anche
Sviluppare applicazioni SAP usando il modello di servizio WCF