Créer un canal à l’aide de SAP
Dans le modèle de canal WCF, vous appelez des opérations sur le système SAP ou vous recevez des messages du système SAP en échangeant des messages SOAP avec l’adaptateur Microsoft BizTalk pour mySAP Business Suite sur un canal WCF.
Vous appelez des opérations (opérations sortantes) à l’aide d’un IRequestChannel ou d’un IOutputChannel pour envoyer des messages à l’adaptateur
Vous recevez des messages (déclenchés à partir du système SAP) sur un IReplyChannel.
Les rubriques de cette section fournissent des informations sur la création et la configuration des formes de canal utilisées pour les opérations entrantes et sortantes.
Création de canaux sortants (client)
Vous pouvez utiliser un IRequestChannel ou un IOutputChannel pour appeler des opérations sur le système SAP. Dans les deux cas, vous créez d’abord un System.ServiceModel.ChannelFactory à l’aide de l’interface appropriée. Vous utilisez ensuite la fabrique pour créer le canal. Une fois que vous avez créé le canal, vous pouvez l’utiliser pour appeler des opérations sur l’adaptateur.
Pour créer et ouvrir un canal sortant
Créez et initialisez un instance de ChannelFactory pour la forme de canal souhaitée à l’aide d’un point de terminaison et d’une liaison. Le point de terminaison spécifie un URI de connexion SAP et la liaison est un instance de SAPDBBinding. (Définissez les propriétés de liaison requises avant d’ouvrir la fabrique de canal.)
Fournissez des informations d’identification SAP pour la fabrique de canaux à l’aide de la propriété ClientCredentials .
Ouvrez la fabrique de canal.
Obtenez une instance du canal en appelant la méthode CreateChannel sur la fabrique de canal.
Ouvrez le canal.
Vous pouvez spécifier la liaison et l’adresse de point de terminaison dans votre code ou à partir de la configuration.
Spécification de la liaison et de l’adresse de point de terminaison dans le code
L’exemple de code suivant montre comment créer un IRequestChannel en spécifiant la liaison et l’adresse de point de terminaison dans le code. Le code permettant de créer un IOutputChannel est le même, sauf que vous devez spécifier une interface IOutputChannel pour le channelFactory et le type de canal.
// 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();
Spécification de la liaison et de l’adresse de point de terminaison dans la configuration
L’exemple de code suivant montre comment créer une fabrique de canaux à partir d’un point de terminaison client spécifié dans la configuration.
// 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();
Paramètres de configuration
Le code suivant montre les paramètres de configuration utilisés pour l’exemple précédent. Le contrat du point de terminaison client doit être « System.ServiceModel.Channels.IRequestChannel » ou « System.ServiceModel.Channels.IRequestChannel » en fonction du type de forme de canal que vous souhaitez créer.
<?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>
Création de canaux entrants (de service)
Vous configurez l’adaptateur pour recevoir les messages entrants d’un système SAP en définissant des propriétés de liaison sur un instance de SAPBinding. Vous utilisez ensuite cette liaison pour générer un écouteur de canal à partir duquel vous pouvez obtenir un canal IReplyChannel pour recevoir des opérations de l’adaptateur.
Pour créer et ouvrir un IReplyChannel pour recevoir des notifications de modification des données
Créez un instance de SAPBinding.
Définissez toutes les propriétés de liaison requises pour les opérations que vous souhaitez recevoir. Veillez à définir la propriété de liaison AcceptCredentialsInUri .
Créez un BindingParameterCollection et ajoutez un InboundActionCollection qui contient les actions des opérations que vous souhaitez recevoir. L’adaptateur retourne une exception au système SAP pour toutes les autres opérations. Cette étape est facultative. Pour plus d’informations, consultez Réception d’opérations entrantes à partir du système SAP à l’aide du modèle de canal WCF.
Créez un écouteur de canal en appelant la méthode BuildChannelListener<IReplyChannel> sur SAPBinding. Vous spécifiez l’URI de connexion SAP comme l’un des paramètres de cette méthode. L’URI de connexion doit contenir des paramètres pour une destination RFC sur le système SAP. Pour plus d’informations sur l’URI de connexion SAP, consultez Créer l’URI de connexion système SAP. Si vous avez créé un BindingParameterCollection à l’étape 3, vous le spécifiez également lorsque vous créez l’écouteur de canal.
Ouvrez l’écouteur.
Obtenez un canal IReplyChannel en appelant la méthode AcceptChannel sur l’écouteur.
Ouvrez le canal.
Le code suivant montre comment créer un écouteur de canal et obtenir un IReplyChannel pour recevoir des opérations de l’adaptateur.
// 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();
Voir aussi
Développer des applications en utilisant le modèle de canal WCF