Partager via


Vue d’ensemble du modèle de service WCF avec l’adaptateur SAP

Lorsque vous consommez des opérations sur lesquelles l’adaptateur Microsoft BizTalk pour mySAP Business Suite fait surface, votre code agit en tant que client ou service de l’adaptateur.

Votre code agit en tant que client pour appeler les types d’opérations suivants sur le système SAP :

  • Appelez un appel de fonction distante (RFC).

  • Appeler un appel de fonction distante transactionnelle (tRFC).

  • Appelez une interface de programmation d’application métier (BAPI).

  • Envoyer un document intermédiaire (IDOC)

    Votre code agit comme un service pour recevoir les types d’opérations suivants :

  • Recevoir une RFC (serveur RFC)

  • Recevoir un tRFC (serveur tRFC)

  • Recevez un IDOC.

Notes

Étant donné que les BAPIs sont des méthodes exposées par le système SAP sur des objets métier situés dans le référentiel d’objets métier (BOR), vous ne pouvez pas recevoir de BAPIs.

Dans le modèle de service Windows Communication Foundation (WCF), le contrat de service qui existe entre un client et un service est représenté sous la forme d’une interface .NET, et les opérations sont représentées en tant que méthodes sur cette interface. L’adaptateur SAP et WCF fournissent des outils qui vous permettent de générer cette interface pour des opérations ciblées à partir des métadonnées exposées par l’adaptateur. Ces outils créent également une classe de client WCF qui peut être utilisée pour appeler les opérations exposées dans l’interface de service. Une application cliente peut appeler les méthodes de la classe de client WCF pour appeler des opérations sur l’adaptateur. Pour implémenter un service pour recevoir des opérations de l’adaptateur SAP, vous implémentez l’interface générée pour l’opération cible.

Les sections suivantes expliquent comment utiliser le modèle de service WCF pour créer le code client et de service pour l’adaptateur SAP.

Création d’un client WCF et appel d’opérations sur SAP

Pour utiliser le modèle de service WCF afin d’appeler des opérations sur l’adaptateur SAP, vous devez d’abord générer une classe de client WCF pour les opérations cibles. Vous pouvez ensuite créer un instance de cette classe, un client WCF, et appeler ses méthodes pour effectuer des opérations sur le système SAP.

Pour appeler des opérations sur l’adaptateur SAP

  1. Générez une classe de client WCF et du code d’assistance. Utilisez le plug-in Add Adapter Service Reference Visual Studio ou l’outil ServiceModel Metadata Utility Tool (svcutil.exe) pour générer une classe de client WCF ciblée sur les artefacts système SAP avec lesquels vous souhaitez travailler. Pour plus d’informations sur la génération d’un client WCF, consultez Générer un client WCF ou un contrat de service WCF pour les artefacts de solution SAP.

  2. Créez un client WCF instance en spécifiant une liaison de client. La spécification d’une liaison client implique de spécifier la liaison et l’adresse de point de terminaison que le client WCF utilisera. Vous pouvez le faire impérativement dans le code ou de manière déclarative dans la configuration. Pour plus d’informations sur la spécification d’une liaison de client, consultez Configurer une liaison de client pour le système SAP. Le code suivant crée un client WCF qui peut être utilisé pour appeler une RFC sur le système SAP. Il définit également les informations d’identification du système SAP. Le client WCF est initialisé à partir de la configuration.

    RfcClient rfcClient = new RfcClient("SAPBinding_Rfc");  
    
    rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
    rfcClient.ClientCredentials.UserName.Password = "YourPassword";  
    
  3. Ouvrez le client WCF.

    rfcClient.Open();  
    
  4. Appelez des méthodes sur le client WCF créé à l’étape 2 pour effectuer des opérations sur le système SAP. Le code suivant appelle la méthode SD_RFC_CUSTOMER_GET du client WCF pour appeler la RFC sur le système 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);  
    
  5. Fermez le client WCF.

    rfcClient.Close();  
    
    

Création et implémentation d’un service WCF à l’aide de l’adaptateur SAP

Pour utiliser le modèle de service WCF pour recevoir des opérations à partir de l’adaptateur SAP, vous devez d’abord générer l’interface .NET (également appelée contrat de service WCF) qui représente le contrat de service exposé par l’adaptateur SAP pour l’opération. Pour plus d’informations sur la procédure à suivre, consultez Générer un client WCF ou un contrat de service WCF pour les artefacts de solution SAP.

Vous implémentez ensuite un service WCF en implémentant l’interface générée. Cette classe contient la logique métier pour traiter l’opération et retourner une réponse à l’adaptateur. Ensuite, vous utilisez un hôte de service (System.ServiceModel.ServiceHost) pour héberger un instance de ce service.

Pour créer et implémenter un service WCF

  1. Générez un contrat de service WCF et des classes d’assistance. Utilisez le plug-in Add Adapter Service Reference plug-in ou svcutil.exe pour générer un contrat de service WCF (interface) ciblé sur les artefacts système SAP avec lesquels vous souhaitez travailler. Pour plus d’informations sur la génération d’un client WCF, consultez Générer un client WCF ou un contrat de service WCF pour les artefacts de solution SAP.

  2. Implémentez un service WCF à partir des classes d’interface et d’assistance générées à l’étape 1. Si une erreur se produit lors du traitement des données de l’opération, la méthode qui gère cette opération peut lever une exception pour retourner une erreur au système SAP ; Sinon, la méthode doit retourner un instance de la classe de réponse (générée) appropriée pour l’opération. Vous devez attribuer la classe de service WCF comme suit :

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]  
    
    1. Si vous avez utilisé le plug-in Add Adapter Service Reference pour générer l’interface, vous pouvez implémenter votre logique directement dans la méthode appropriée dans la classe SAPBindingService générée. Cette classe se trouve dans SAPBindingService.cs. Les sous-classes de code suivantes sont 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);  
          }  
      }  
      
    2. Si vous avez utilisé svcutil.exe pour générer l’interface, vous devez créer une classe qui implémente l’interface et implémenter votre logique dans la méthode appropriée de cette classe.

  3. Créez une instance du service WCF créé à l’étape 2.

    // create service instance  
    RfcServerClass rfcServerInstance = new RfcServerClass();  
    
  4. Créez un instance de System.ServiceModel.ServiceHost à l’aide du service WCF et d’un URI de connexion de base. L’URI de connexion de base ne peut pas contenir userinfoparams ou un query_string.

    // Enable service host  
    Uri[] baseUri = new Uri[] { new Uri("sap://a/YourSAPHost/00") };  
    ServiceHost srvHost = new ServiceHost(pollingInstance, baseUri);  
    
  5. Créez un SAPBinding et configurez-le pour l’opération en définissant ses propriétés de liaison. Vous pouvez le faire de manière explicite dans le code ou de manière déclarative dans la configuration. Au minimum, vous devez définir AcceptCredentialsInUri sur 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;  
    
  6. Ajoutez un point de terminaison de service à l’hôte de service. Pour ce faire :

    • Utilisez la liaison créée à l’étape 5.

    • Spécifiez un URI de connexion qui contient des informations d’identification et spécifie une connexion d’écouteur (passerelle SAP, service de passerelle et ID de programme) dans le query_string. Pour plus d’informations sur l’URI de connexion SAP, consultez Créer l’URI de connexion système SAP.

    • Spécifiez le contrat de service. Il s’agit du nom de l’interface qui représente le contrat de service WCF. Pour les RFC, il s’agit de « 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);  
    
  7. Pour recevoir l’opération à partir du système SAP, ouvrez l’hôte de service. Votre service WCF est appelé chaque fois que le système SAP appelle l’opération sur l’ID de programme et le système spécifiés dans l’URI de service à l’étape 6.

    // Open the service host to begin receiving the operation.  
    srvHost.Open();  
    
  8. Pour arrêter de recevoir l’opération, fermez l’hôte de service.

    Important

    L’adaptateur continue de recevoir l’opération jusqu’à ce que l’hôte de service soit fermé. Vous devez toujours fermer l’hôte de service lorsque vous ne souhaitez plus recevoir l’opération.

    srvHost.Close();  
    

Voir aussi

Développer des applications SAP à l’aide du modèle de service WCF