Compartir a través de


Información general del modelo de canal WCF con el adaptador de SAP

Para invocar RFC, TRFC o BAPIs en un sistema SAP, o para enviar IDOCS a un sistema SAP, el código actúa como un cliente WCF y envía operaciones salientes al adaptador. En el modelo de canal WCF, el código invoca las operaciones en el adaptador mediante el envío de un mensaje de solicitud a través de un canal.

Para actuar como un servidor tRFC o RFC en un sistema SAP, el código se comporta como un servicio WCF. Es decir, el adaptador invoca una operación de entrada en el código, por ejemplo, una operación RFC o ReceiveIdoc (para recibir un IDOC en formato de cadena de un sistema SAP). En este escenario, el código recibe un mensaje de solicitud para la operación a través de un canal del adaptador.

Los temas de esta sección proporcionan información general sobre el uso del adaptador de SAP con el modelo de canal WCF.

Información general sobre el modelo de canal WCF

Los clientes y servicios se comunican intercambiando mensajes SOAP. El modelo de canal WCF es una abstracción de bajo nivel de este intercambio de mensajes. Proporciona interfaces y tipos que permiten enviar y recibir mensajes mediante una pila de protocolos en capas denominada pila de canales. Cada capa de la pila se compone de un canal y cada canal se crea a partir de un enlace WCF. En la capa más baja se encuentra el canal de transporte. El canal de transporte implementa el mecanismo de transporte subyacente entre un servicio y un cliente y presenta cada mensaje a las capas superiores (y, en última instancia, la aplicación que consume) como system.ServiceModel.Message. La clase Message de WCF es una abstracción de un mensaje SOAP. WCF proporciona varias interfaces de canal, denominadas formas de canal, que modelan los patrones básicos de intercambio de mensajes SOAP, como solicitud-respuesta o unidireccional. Un enlace de transporte WCF proporciona una implementación de una o varias formas de canal que las capas superiores pueden usar para enviar y recibir mensajes. Para obtener más información sobre el modelo de canal WCF, vea Información general sobre el modelo de canal.

El adaptador de SAP es un enlace de transporte personalizado de WCF que expone un sistema SAP como un servicio WCF.

Formas de canal admitidas para el adaptador de SAP

El adaptador implementa las siguientes formas de canal WCF:

  • IRequestChannel (System.ServiceModel.Channels.IRequestChannel). La interfaz IRequestChannel implementa el lado cliente de un intercambio de mensajes de solicitud-respuesta. Puede usar un IRequestChannel para realizar operaciones para las que desea consumir una respuesta, por ejemplo, para invocar una RFC en el sistema SAP que devuelve datos.

  • IOutputChannel (System.ServiceModel.Channels.IOutputChannel). Esta forma implementa el lado cliente de un intercambio de mensajes unidireccional. Puede usar un IOutputChannel para invocar una operación para la que no necesite consumir una respuesta, por ejemplo, para invocar una RFC en el sistema SAP que no devuelve ningún dato.

  • IReplyChannel (System.ServiceModel.Channels.IReplyChannel). Esta forma implementa el lado del servicio de un intercambio de mensajes de solicitud-respuesta. Puede usar un IReplyChannel para implementar un servidor RFC o tRFC o para recibir IDOC de un sistema SAP.

    Al igual que cualquier enlace WCF, el adaptador de SAP usa un patrón de fábrica para proporcionar canales al código de la aplicación. Se usa un objeto Microsoft.Adapters.SAPBinding para crear instancias de:

  • System.ServiceModel.ChannelFactory<IRequestChannel para proporcionar canales IRequestChannel> que puede usar para invocar operaciones de solicitud-respuesta en el adaptador.

  • System.ServiceModel.ChannelFactory<IOutputChannel para proporcionar canales IOutputChannel> que puede usar para invocar operaciones unidireccionales en el adaptador.

  • System.ServiceModel.IChannelListener<IReplyChannel para proporcionar canales IReplyChannel> que puede usar para recibir operaciones de solicitud-respuesta del adaptador.

Crear mensajes para el adaptador de SAP en el modelo de canal WCF

En WCF, la clase System.ServiceModel.Channels.Message proporciona una representación en memoria de un mensaje SOAP. Para crear una instancia de Message , invoque el método estático Message.Create .

Hay dos partes importantes para el mensaje SOAP que debe especificar al construir una instancia de Message para enviar al adaptador de SAP.

  • La acción del mensaje es una cadena que forma parte del encabezado del mensaje SOAP. La acción de mensaje identifica la operación que se debe invocar en el adaptador de SAP. A continuación se muestra la acción de mensaje que se especifica para invocar la RFC de SD_RFC_CUSTOMER_GET en un sistema SAP: http://Microsoft.LobServices.Sap/2007/03/Rfc/SD_RFC_CUSTOMER_GET.

  • El cuerpo del mensaje contiene los datos de parámetro de la operación. El cuerpo del mensaje se compone de XML bien formado que corresponde al esquema de mensajes esperado por el adaptador de SAP para la operación solicitada. El cuerpo del mensaje siguiente contiene los parámetros del SD_RFC_CUSTOMER_GET RFC en un sistema 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>  
    

    Para obtener información sobre los esquemas de mensajes del adaptador de SAP y las acciones de mensajes para las operaciones, vea Mensajes y esquemas de mensajes para el adaptador de BizTalk para mySAP Business Suite.

    El método Message.Create está sobrecargado y ofrece muchas opciones diferentes para proporcionar el cuerpo del mensaje. En el código siguiente se muestra cómo crear una instancia de Message mediante un System.Xml. XmlReader para proporcionar el cuerpo del mensaje. En este código, el cuerpo del mensaje se lee de una constante de cadena.

//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);  

Importante

Debe proporcionar una acción de mensaje en la instancia de Message . Normalmente, esto se hace cuando se crea la instancia de Message .

Compatibilidad de streaming en el adaptador de SAP en el modelo de canal WCF

Cómo se crean y consumen los mensajes que intercambia con el adaptador de SAP se determina cómo se transmite el mensaje entre el código y el adaptador.

Streaming de nodo

El streaming de nodo es el único nivel de streaming admitido para todas las operaciones excepto las operaciones SendIdoc y ReceiveIdoc.

Para realizar la transmisión por secuencias de nodos para un mensaje, haga lo siguiente:

  • Cree un mensaje saliente mediante un objeto XmlReader para proporcionar el cuerpo del mensaje.

  • Consumir un mensaje entrante mediante xmlReader. Para obtener el lector, llame al método GetReaderAtBodyContents en el mensaje entrante.

Streaming de valor de nodo

Dado que las operaciones SendIdoc y ReceiveIdoc contienen los datos de IDOC en una cadena bajo un único nodo XML (<idocData>), el adaptador admite el streaming de valores de nodo en estas operaciones.

Para realizar el streaming de nodo-valor para estas operaciones, puede hacer lo siguiente:

  • Cree el mensaje de solicitud SendIdoc (saliente) mediante bodyWriter que implementa el streaming de valor de nodo para proporcionar el cuerpo del mensaje.

  • Use el mensaje de solicitud ReceiveIdoc (entrante) llamando al método WriteBodyContents en el mensaje con un objeto XmlDictionaryWriter que implementa el streaming de valor de nodo.

    Para obtener más información sobre el streaming de IOC de archivos planos (cadena) mediante el modelo de canal WCF, consulte Streaming Flat-File IDOC en SAP mediante el modelo de canal WCF.

Consulte también

Desarrollar aplicaciones con el modelo de canal WCF