Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans le modèle de canal WCF, vous appelez des opérations sur le système SAP ou 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 pour clients
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 l'usine 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 une 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 une instance de SAPDBBinding. (Définissez les propriétés de liaison requises avant d’ouvrir l'usine de canal.)
Fournissez des informations d’identification SAP pour l'usine de canaux à l’aide de la propriété ClientCredentials.
Ouvrez l'usine de canaux.
Obtenez une instance du canal en appelant la méthode CreateChannel sur la fabrique de canaux.
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écifier la liaison et 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 pour le 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 (service clients)
Vous configurez l’adaptateur pour recevoir des messages entrants à partir d’un système SAP en définissant des propriétés de liaison sur une instance de SAPBinding. Vous utilisez ensuite cette liaison pour créer un écouteur de canal à partir duquel vous pouvez obtenir un canal IReplyChannel afin de recevoir des opérations de l'adaptateur.
Pour créer et ouvrir un IReplyChannel pour recevoir des notifications de changement de données
Créez une instance de SAPBinding.
Définissez 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 au système SAP. Si vous avez créé un BindingParameterCollection à l’étape 3, vous spécifiez également cela 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();