Información general del modelo de servicio WCF con el adaptador de SAP
Cuando se consumen operaciones que muestra el adaptador de Microsoft BizTalk para mySAP Business Suite, el código actúa como cliente o servicio para el adaptador.
El código actúa como cliente para invocar los siguientes tipos de operaciones en el sistema SAP:
Invoque una llamada a función remota (RFC).
Invoque una llamada a función remota transaccional (tRFC).
Invoque una interfaz de programación de aplicaciones empresariales (BAPI).
Enviar un documento intermedio (IDOC)
El código actúa como servicio para recibir los siguientes tipos de operaciones:
Recepción de un RFC (servidor RFC)
Recibir un tRFC (servidor tRFC)
Recibir un IDOC.
Nota
Dado que los BAPIs son métodos expuestos por el sistema SAP en objetos empresariales ubicados en el Repositorio de objetos de negocio (BOR), no puede recibir BAPIs.
En el modelo de servicio de Windows Communication Foundation (WCF), el contrato de servicio que existe entre un cliente y un servicio se representa como una interfaz .NET y las operaciones se representan como métodos en esta interfaz. El adaptador de SAP y WCF proporcionan herramientas que permiten generar esta interfaz para las operaciones de destino a partir de los metadatos que expone el adaptador. Estas herramientas también crean una clase de cliente WCF que se puede usar para invocar las operaciones expuestas en la interfaz de servicio. Una aplicación cliente puede llamar a los métodos de la clase de cliente WCF para invocar operaciones en el adaptador. Para implementar un servicio para recibir operaciones del adaptador de SAP, implemente la interfaz generada para la operación de destino.
En las secciones siguientes se explica cómo usar el modelo de servicio WCF para crear código de cliente y servicio para el adaptador de SAP.
Creación de un cliente WCF y operaciones de invocación en SAP
Para usar el modelo de servicio WCF para invocar operaciones en el adaptador de SAP, primero debe generar una clase de cliente WCF para las operaciones de destino. A continuación, puede crear una instancia de esta clase, un cliente WCF y llamar a sus métodos para realizar operaciones en el sistema SAP.
Para invocar operaciones en el adaptador de SAP
Genere una clase de cliente WCF y un código auxiliar. Use el complemento Agregar referencia del servicio adaptador de Visual Studio o la Herramienta de utilidad de metadatos serviceModel (svcutil.exe) para generar una clase de cliente WCF destinada a los artefactos del sistema SAP con los que desea trabajar. Para obtener más información sobre cómo generar un cliente WCF, consulte Generación de un cliente WCF o un contrato de servicio WCF para artefactos de solución de SAP.
Cree una instancia de cliente WCF especificando un enlace de cliente. Especificar un enlace de cliente implica especificar el enlace y la dirección del punto de conexión que usará el cliente WCF. Puede hacerlo de forma imperativa en el código o mediante declaración en la configuración. Para obtener más información sobre cómo especificar un enlace de cliente, consulte Configuración de un enlace de cliente para el sistema SAP. El código siguiente crea un cliente WCF que se puede usar para invocar una RFC en el sistema SAP. También establece las credenciales del sistema SAP. El cliente WCF se inicializa a partir de la configuración.
RfcClient rfcClient = new RfcClient("SAPBinding_Rfc"); rfcClient.ClientCredentials.UserName.UserName = "YourUserName"; rfcClient.ClientCredentials.UserName.Password = "YourPassword";
Abra el cliente WCF.
rfcClient.Open();
Invoque métodos en el cliente WCF creado en el paso 2 para realizar operaciones en el sistema SAP. El código siguiente invoca el método SD_RFC_CUSTOMER_GET del cliente WCF para invocar la RFC en el sistema SAP.
microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[] customers = new microsoft.lobservices.sap._2007._03.Types.Rfc.RFCCUST[0]; rfcClient.SD_RFC_CUSTOMER_GET(string.Empty, "AB*", ref customers);
Cierre del cliente WCF.
rfcClient.Close();
Creación e implementación de un servicio WCF mediante el adaptador de SAP
Para usar el modelo de servicio WCF para recibir operaciones del adaptador de SAP, primero debe generar la interfaz .NET (también denominada contrato de servicio WCF) que representa el contrato de servicio expuesto por el adaptador de SAP para la operación. Para obtener más información sobre cómo hacerlo, consulte Generación de un cliente WCF o un contrato de servicio WCF para artefactos de solución de SAP.
A continuación, implementará un servicio WCF mediante la implementación de la interfaz generada. Esta clase contiene la lógica de negocios para procesar la operación y devolver una respuesta al adaptador. A continuación, se usa un host de servicio (System.ServiceModel.ServiceHost) para hospedar una instancia de este servicio.
Para crear e implementar un servicio WCF
Genere un contrato de servicio WCF y clases auxiliares. Use el complemento Agregar referencia del servicio adaptador o svcutil.exe para generar un contrato de servicio WCF (interfaz) destinado a los artefactos del sistema SAP con los que desea trabajar. Para obtener más información sobre cómo generar un cliente WCF, consulte Generación de un cliente WCF o un contrato de servicio WCF para artefactos de solución de SAP.
Implemente un servicio WCF desde la interfaz y las clases auxiliares generadas en el paso 1. Si se produce un error al procesar los datos de la operación, el método que controla esa operación puede producir una excepción para devolver un error al sistema SAP; de lo contrario, el método debe devolver una instancia de la clase de respuesta adecuada (generada) para la operación. Debe atribuir la clase de servicio WCF de la siguiente manera:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
Si usó el complemento Add Adapter Service Reference para generar la interfaz, puede implementar la lógica directamente en el método adecuado en la clase SAPBindingService generada. Esta clase se puede encontrar en SAPBindingService.cs. El código siguiente subclase la clase SAPBindingService .
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,UseSynchronizationContext = false)] class RfcServerClass : SAPBindingNamespace.SAPBindingService { public override Z_RFC_MKD_ADDResponse Z_RFC_MKD_ADD(Z_RFC_MKD_ADDRequest request) { // If either parameter is null throw an exception if (request.X == null || request.Y == null) throw new System.ArgumentNullException(); // Add the two operands int result = (int) (request.X + request.Y); return new Z_RFC_MKD_ADDResponse(result); } }
Si usó svcutil.exe para generar la interfaz, debe crear una clase que implemente la interfaz e implemente la lógica en el método adecuado de esta clase.
Cree una instancia del servicio WCF creado en el paso 2.
// create service instance RfcServerClass rfcServerInstance = new RfcServerClass();
Cree una instancia de System.ServiceModel.ServiceHost mediante el servicio WCF y un URI de conexión base. El URI de conexión base no puede contener userinfoparams ni un query_string.
// Enable service host Uri[] baseUri = new Uri[] { new Uri("sap://a/YourSAPHost/00") }; ServiceHost srvHost = new ServiceHost(pollingInstance, baseUri);
Cree una instancia de SAPBinding y configúrela para la operación estableciendo sus propiedades de enlace. Puede hacerlo explícitamente en el código o mediante declaración en la configuración. Como mínimo, debe establecer AcceptCredentialsInUri en true.
// Create and configure a binding for the service endpoint. NOTE: binding // parameters are set here for clarity, but these are already set in the // the generated configuration file SAPBinding binding = new SAPBinding(); // The credentials are included in the connection URI, so set this property to true binding.AcceptCredentialsInUri = true;
Agregue un punto de conexión de servicio al host de servicio. Para ello, siga estos pasos:
Use el enlace creado en el paso 5.
Especifique un URI de conexión que contenga credenciales y especifique una conexión del agente de escucha (puerta de enlace de SAP, servicio de puerta de enlace e identificador de programa) en el query_string. Para más información sobre el URI de conexión de SAP, consulte Creación del URI de conexión del sistema SAP.
Especifique el contrato de servicio. Este es el nombre de la interfaz que representa el contrato de servicio WCF. En el caso de las RFC, es "Rfc".
// Add service endpoint // NOTE: The contract for the service endpoint is "Rfc". // This is the generated WCF service contract (interface) -- see SAPBindingInterface.cs. Uri serviceUri = new Uri("sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?ListenerGwServ=SAPGW00&ListenerGwHost=YourSapHost&ListenerProgramId=SAPAdapter"); srvHost.AddServiceEndpoint("Rfc", binding, serviceUri);
Para recibir la operación desde el sistema SAP, abra el host de servicio. El servicio WCF se invocará siempre que el sistema SAP invoque la operación en el identificador de programa y el sistema especificados en el URI del servicio en el paso 6.
// Open the service host to begin receiving the operation. srvHost.Open();
Para dejar de recibir la operación, cierre el host del servicio.
Importante
El adaptador seguirá recibiendo la operación hasta que se cierre el host del servicio. Siempre debe cerrar el host de servicio cuando ya no quiera recibir la operación.
srvHost.Close();
Consulte también
Desarrollo de aplicaciones sap mediante el modelo de servicio WCF