Creación de un canal mediante SAP
En el modelo de canal WCF, se invocan operaciones en el sistema SAP o se reciben mensajes del sistema SAP intercambiando mensajes SOAP con el adaptador de Microsoft BizTalk para mySAP Business Suite a través de un canal WCF.
Se invocan operaciones (operaciones de salida) mediante IRequestChannel o IOutputChannel para enviar mensajes al adaptador.
Recibirá mensajes (desencadenados desde el sistema SAP) a través de un IReplyChannel.
Los temas de esta sección proporcionan información sobre cómo crear y configurar formas de canal que se usan para las operaciones entrantes y salientes.
Crear canales salientes (cliente)
Puede usar un IRequestChannel o un IOutputChannel para invocar operaciones en el sistema SAP. En cualquier caso, primero se crea una clase System.ServiceModel.ChannelFactory mediante la interfaz adecuada. A continuación, use el generador para crear el canal. Después de crear el canal, puede usarlo para invocar operaciones en el adaptador.
Para crear y abrir un canal de salida
Cree e inicialice una instancia de ChannelFactory para la forma de canal deseada mediante un punto de conexión y un enlace. El punto de conexión especifica un URI de conexión de SAP y el enlace es una instancia de SAPDBBinding. (Establezca las propiedades de enlace necesarias antes de abrir el generador de canales).
Proporcione las credenciales de SAP para el generador de canales mediante la propiedad ClientCredentials .
Abra el generador de canales.
Obtenga una instancia del canal invocando el método CreateChannel en el generador de canales.
Abra el canal.
Puede especificar la dirección de enlace y punto de conexión en el código o desde la configuración.
Especificar el enlace y la dirección del punto de conexión en el código
En el ejemplo de código siguiente se muestra cómo crear un IRequestChannel especificando el enlace y la dirección del punto de conexión en el código. El código para crear un IOutputChannel es el mismo, excepto que debe especificar una interfaz IOutputChannel para el tipo de canal y ChannelFactory .
// 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();
Especificar el enlace y la dirección del punto de conexión en la configuración
En el ejemplo de código siguiente se muestra cómo crear un generador de canales a partir de un punto de conexión de cliente especificado en la configuración.
// 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();
Opciones de configuración
En el código siguiente se muestran las opciones de configuración usadas para el ejemplo anterior. El contrato para el punto de conexión de cliente debe ser "System.ServiceModel.Channels.IRequestChannel" o "System.ServiceModel.Channels.IRequestChannel" en función del tipo de forma de canal que desee crear.
<?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>
Crear canales entrantes (servicio)
Configure el adaptador para recibir mensajes entrantes de un sistema SAP estableciendo propiedades de enlace en una instancia de SAPBinding. Después, use este enlace para crear un agente de escucha de canal desde el que puede obtener un canal IReplyChannel para recibir operaciones del adaptador.
Para crear y abrir un IReplyChannel para recibir notificaciones modificadas por datos
Cree una instancia de SAPBinding.
Establezca las propiedades de enlace necesarias para las operaciones que desea recibir. Asegúrese de establecer la propiedad de enlace AcceptCredentialsInUri .
Cree un BindingParameterCollection y agregue inboundActionCollection que contenga las acciones de las operaciones que desea recibir. El adaptador devolverá una excepción al sistema SAP para todas las demás operaciones. Este paso es opcional. Para obtener más información, vea Recepción de operaciones entrantes desde el sistema SAP mediante el modelo de canal WCF.
Cree un agente de escucha de canal invocando el método BuildChannelListener<IReplyChannel> en SAPBinding. Especifique el URI de conexión de SAP como uno de los parámetros de este método. El URI de conexión debe contener parámetros para un destino RFC en el sistema SAP. Para obtener más información sobre el URI de conexión de SAP, consulte Creación del URI de conexión del sistema SAP. Si creó un BindingParameterCollection en el paso 3, también debe especificarlo al crear el agente de escucha del canal.
Abra el agente de escucha.
Obtenga un canal IReplyChannel invocando el método AcceptChannel en el agente de escucha.
Abra el canal.
En el código siguiente se muestra cómo crear un agente de escucha de canal y obtener un IReplyChannel para recibir operaciones del adaptador.
// 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();