Vue d’ensemble du modèle de canal WCF avec l’adaptateur SAP
Pour appeler des RFC, des TRFCs ou des BAPI sur un système SAP, ou pour envoyer des IDOCS à un système SAP, votre code agit en tant que client WCF et envoie des opérations sortantes à l’adaptateur. Dans le modèle de canal WCF, votre code appelle des opérations sur l’adaptateur en envoyant un message de demande sur un canal.
Pour agir en tant que serveur tRFC ou RFC sur un système SAP, votre code se comporte comme un service WCF. Autrement dit, l’adaptateur appelle une opération entrante sur votre code, par exemple, une opération RFC ou ReceiveIdoc (pour recevoir un IDOC au format chaîne d’un système SAP). Dans ce scénario, votre code reçoit un message de demande pour l’opération sur un canal à partir de l’adaptateur.
Les rubriques de cette section fournissent une vue d’ensemble de l’utilisation de l’adaptateur SAP avec le modèle de canal WCF.
Vue d’ensemble du modèle de canal WCF
Les clients et les services communiquent en échangeant des messages SOAP. Le modèle de canal WCF est une abstraction de bas niveau de cet échange de messages. Il fournit des interfaces et des types qui vous permettent d’envoyer et de recevoir des messages à l’aide d’une pile de protocoles en couches appelée pile de canaux. Chaque couche de la pile est composée d’un canal et chaque canal est créé à partir d’une liaison WCF. Au niveau de la couche la plus basse se trouve le canal de transport. Le canal de transport implémente le mécanisme de transport sous-jacent entre un service et un client et présente chaque message aux couches supérieures (et finalement à l’application consommatrice) en tant que System.ServiceModel.Message. La classe Message WCF est une abstraction d’un message SOAP. WCF fournit plusieurs interfaces de canal, appelées formes de canal, qui modélisent les modèles d’échange de messages SOAP de base, tels que requête-réponse ou unidirectionnel. Une liaison de transport WCF fournit une implémentation d’une ou plusieurs formes de canal que les couches supérieures peuvent utiliser pour envoyer et recevoir des messages. Pour plus d’informations sur le modèle de canal WCF, consultez Vue d’ensemble du modèle de canal.
L’adaptateur SAP est une liaison de transport personnalisée WCF qui expose un système SAP en tant que service WCF.
Formes de canal prises en charge pour l’adaptateur SAP
L’adaptateur implémente les formes de canal WCF suivantes :
IRequestChannel (System.ServiceModel.Channels.IRequestChannel). L’interface IRequestChannel implémente le côté client d’un échange de messages de demande-réponse. Vous pouvez utiliser un IRequestChannel pour effectuer des opérations pour lesquelles vous souhaitez utiliser une réponse, par exemple pour appeler une RFC sur le système SAP qui retourne des données.
IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Cette forme implémente le côté client d’un échange de messages unidirectionnel. Vous pouvez utiliser un IOutputChannel pour appeler une opération pour laquelle vous n’avez pas besoin d’utiliser une réponse, par exemple pour appeler une RFC sur le système SAP qui ne retourne aucune donnée.
IReplyChannel (System.ServiceModel.Channels.IReplyChannel). Cette forme implémente le côté service d’un échange de messages de demande-réponse. Vous pouvez utiliser un IReplyChannel pour implémenter un serveur RFC ou tRFC ou pour recevoir des IDOCs à partir d’un système SAP.
Comme toute liaison WCF, l’adaptateur SAP utilise un modèle de fabrique pour fournir des canaux au code d’application. Vous utilisez un objet Microsoft.Adapters.SAPBinding pour créer des instances de :
System.ServiceModel.ChannelFactory<IRequestChannel> pour fournir des canaux IRequestChannel que vous pouvez utiliser pour appeler des opérations de demande-réponse sur l’adaptateur.
System.ServiceModel.ChannelFactory<IOutputChannel> pour fournir des canaux IOutputChannel que vous pouvez utiliser pour appeler des opérations unidirectionnelles sur l’adaptateur.
System.ServiceModel.IChannelListener<IReplyChannel> pour fournir des canaux IReplyChannel que vous pouvez utiliser pour recevoir des opérations de demande-réponse de l’adaptateur.
Création de messages pour l’adaptateur SAP dans le modèle de canal WCF
Dans WCF, la classe System.ServiceModel.Channels.Message fournit une représentation en mémoire d’un message SOAP. Vous créez un message instance en appelant la méthode statique Message.Create.
Le message SOAP comporte deux parties importantes que vous devez spécifier lorsque vous construisez un message instance à envoyer à l’adaptateur SAP.
L’action de message est une chaîne qui fait partie de l’en-tête du message SOAP. L’action de message identifie l’opération qui doit être appelée sur l’adaptateur SAP. L’action de message suivante est spécifiée pour appeler le SD_RFC_CUSTOMER_GET RFC sur un système SAP :
http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET
.Le corps du message contient les données de paramètre pour l’opération. Le corps du message est composé d’un code XML bien formé qui correspond au schéma de message attendu par l’adaptateur SAP pour l’opération demandée. Le corps du message suivant contient les paramètres du SD_RFC_CUSTOMER_GET RFC sur un système SAP.
<SD_RFC_CUSTOMER_GET xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"> <KUNNR i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"> </KUNNR> <NAME1>AB*</NAME1> <CUSTOMER_T> </CUSTOMER_T> </SD_RFC_CUSTOMER_GET>
Pour plus d’informations sur les schémas de message de l’adaptateur SAP et les actions de message pour les opérations, consultez Messages et schémas de message pour l’adaptateur BizTalk pour mySAP Business Suite.
La méthode Message.Create est surchargée et offre de nombreuses options différentes pour fournir le corps du message. Le code suivant montre comment créer un instance message à l’aide d’unSystem.Xml. XmlReader pour fournir le corps du message. Dans ce code, le corps du message est lu à partir d’une constante de chaîne.
//create an XML message to send to the SAP system
//We are invoking the SD_RFC_CUSTOMER_GET RFC.
//The XML below specifies that we want to search for customers with names starting with "AB"
string inputXml = "<SD_RFC_CUSTOMER_GET xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"> <KUNNR i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"> </KUNNR> <NAME1>AB*</NAME1> <CUSTOMER_T> </CUSTOMER_T> </SD_RFC_CUSTOMER_GET>";
//create an XML reader from the input XML
XmlReader reader = XmlReader.Create(new MemoryStream(Encoding.Default.GetBytes(inputXml)));
//create a WCF message from the XML reader
Message inputMessge = Message.CreateMessage(MessageVersion.Soap11, "http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET", reader);
Important
Vous devez fournir une action de message dans votre instance message. Cette opération est généralement effectuée lors de la création de l’instance message.
Prise en charge de la diffusion en continu sur l’adaptateur SAP dans le modèle de canal WCF
La façon dont vous créez et utilisez les messages que vous échangez avec l’adaptateur SAP détermine la façon dont le message est diffusé entre votre code et l’adaptateur.
Streaming de nœuds
La diffusion en continu de nœuds est le seul niveau de diffusion en continu pris en charge pour toutes les opérations, à l’exception des opérations SendIdoc et ReceiveIdoc.
Pour effectuer la diffusion en continu de nœuds pour un message, vous :
Créez un message sortant à l’aide d’un XmlReader pour fournir le corps du message.
Utiliser un message entrant à l’aide d’un XmlReader. Vous obtenez le lecteur en appelant la méthode GetReaderAtBodyContents sur le message entrant.
Streaming de valeur de nœud
Étant donné que les opérations SendIdoc et ReceiveIdoc contiennent les données IDOC dans une chaîne sous un nœud XML unique (<idocData>), l’adaptateur prend en charge la diffusion en continu de valeur de nœud sur ces opérations.
Pour effectuer une diffusion en continu de valeur de nœud pour ces opérations, vous pouvez :
Créez le message de requête SendIdoc (sortant) à l’aide d’un BodyWriter qui implémente la diffusion en continu de valeur de nœud pour fournir le corps du message.
Utilisez le message de requête ReceiveIdoc (entrant) en appelant la méthode WriteBodyContents sur le message avec un XmlDictionaryWriter qui implémente la diffusion en continu de valeur de nœud.
Pour plus d’informations sur la diffusion en continu d’AIDO de fichiers plats (chaîne) à l’aide du modèle de canal WCF, consultez Streaming Flat-File IDOCs dans SAP à l’aide du modèle de canal WCF.
Voir aussi
Développer des applications en utilisant le modèle de canal WCF