Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El adaptador de Microsoft BizTalk para Oracle Database admite el streaming para tipos de datos de objetos grandes (LOB) de Oracle. Con las operaciones del adaptador de Oracle Database, se invocan y se devuelven las respuestas intercambiando mensajes SOAP. Un cuerpo del mensaje SOAP se compone de nodos XML.
Hay dos tipos de streaming de mensajes compatibles con el adaptador:
Streaming de nodos. En el streaming de nodos, el adaptador almacena en búfer cada nodo antes de enviarlo a la base de datos de Oracle (o se devuelve al cliente). Esto significa que, para un tipo de datos LOB, todo el valor se lee en un búfer.
Streaming de valores de nodos. En la transmisión nodo-valor, el valor real del nodo se puede transmitir en fragmentos entre la base de datos Oracle y el cliente. El streaming de valores de nodo admite el streaming de un extremo a otro de tipos de datos LOB entre el cliente del adaptador y la base de datos de Oracle.
Ambos modos de streaming dependen de la compatibilidad con el streaming de nodos y el streaming de valores de nodo en los mensajes de WCF. Por este motivo, el streaming de tipos LOB está estrechamente relacionado con cómo se crean y consumen los mensajes tanto por el adaptador como por una aplicación cliente. Un resultado de esto es que la compatibilidad con los tipos de LOB de streaming no es la misma en todos los modelos de programación.
Las secciones de este tema proporcionan:
Información fundamental sobre cómo se admite el streaming de mensajes en WCF y cómo lo implementa el adaptador.
Información sobre cómo se admite el streaming para los tipos de datos LOB cuando se usa el adaptador en cada modelo de programación.
Aspectos básicos de streaming
La compatibilidad con el streaming implementado por el adaptador de Oracle Database es una combinación de:
Compatibilidad con streaming de mensajes en WCF.
Compatibilidad con streaming en la biblioteca cliente de Oracle (ODP.NET).
La forma en que el adaptador crea y consume internamente los mensajes.
Compatibilidad con streaming de mensajes en WCF
La forma en que WCF admite el streaming en un mensaje depende tanto de cómo se crea el mensaje como de cómo se consume el mensaje.
Se crea un mensaje WCF mediante el método Estático Create de System.ServiceModel.Channels.Message. Este método tiene varias sobrecargas que admiten diferentes formas de pasar el cuerpo del mensaje. Para crear un mensaje WCF, pase el cuerpo del mensaje mediante:
System.Xml.XmlReader o
System.ServiceModel.Channels.BodyWriter.
Se puede consumir un mensaje WCF mediante
Un XmlReader al llamar a Message.GetReaderAtBodyContents(), o
Un XmlDictionaryWriter llamando a Message.WriteBodyContents(XmlDictionaryWriter).
En la tabla siguiente se muestra cómo se comporta WCF para diferentes combinaciones de creación y consumo de mensajes.
| Mensaje creado con | Mensaje consumido con | Comportamiento de WCF |
|---|---|---|
| XmlBodyWriter | XmlDictionaryWriter | Se admite el streaming de valores de nodo . WCF conecta a los dos escritores para habilitar la transmisión. XmlBodyWriter y XmlDictionaryWriter deben admitir el streaming de valores de nodo para que se produzca. |
| XmlBodyWriter | XmlReader | Se admite el streaming de nodos . WCF almacena internamente en un búfer el XmlReader. |
| XmlReader | XmlDictionaryWriter | Se admite el streaming de nodos . WCF almacena en búfer internamente el XmlReader y vuelve a llamar al XmlDictionaryWriter. |
| XmlReader | XmlReader | Se admite el streaming de nodos . WCF almacena internamente en un búfer el XmlReader. |
Compatibilidad con streaming en la biblioteca cliente de Oracle (ODP.NET)
ODP.NET admite el streaming de la siguiente manera:
El streaming solo se admite en tipos de datos LOB de Oracle.
Para algunas operaciones de tabla (y vista), los tipos de datos LOB se almacenan en búfer. Por lo tanto, no se admite ningún streaming.
Control interno de mensajes por el adaptador
El adaptador admite el streaming de la siguiente manera:
El adaptador extiende Message para implementar una clase de mensaje personalizada, Microsoft.Adapters.AdapterUtilities.AdapterMessage. Crea un AdapterMessage para todos los mensajes WCF que proporciona al cliente del adaptador; esto incluye los mensajes de respuesta para todas las operaciones salientes y el mensaje de solicitud para la operación POLLINGSTMT. Esto permite que el adaptador admita el streaming de valores de nodo para la operación ReadLOB proporcionando un xmlReader que admita ReadValueChunk a los clientes del adaptador.
El adaptador consume todos los mensajes recibidos del cliente mediante una implementación personalizada de XmlDictionaryWriter.
El adaptador crea todos los mensajes que envía al cliente mediante una implementación personalizada de XmlBodyWriter, excepto para el mensaje de respuesta ReadLOB. (Esto incluye mensajes de respuesta para todas las operaciones salientes y el mensaje de solicitud para la operación POLLINGSTMT).
Compatibilidad con streaming en el modelo de canal WCF
En la tabla siguiente se proporciona información detallada sobre cómo se admite el streaming en el modelo de canal WCF.
| Operación | Streaming de nodos | Node-Value en streaming | Descripción |
|---|---|---|---|
| Operación de inserción de tabla | Compatible* | No se admite entre el adaptador y la base de datos de Oracle. Compatible entre el cliente y el adaptador.* | No se admite el streaming de valores de nodo de un extremo a otro porque los valores de las columnas LOB se almacenan en búfer por ODP.NET y, a continuación, se realiza la inserción. Sin embargo, el streaming de nodo-valor entre el cliente y el adaptador es posible para las columnas LOB, si el cliente crea el mensaje con BodyWriter. |
| Operación de selección de tabla | Compatible | Compatible | El adaptador usa bodyWriter para crear el mensaje de respuesta. Si el cliente consume el mensaje mediante xmlDictionaryWriter, se produce el streaming de valores de nodo para las columnas LOB. |
| Operación de actualización de tabla | Compatible | No se admite entre el adaptador y la base de datos de Oracle. Se admite entre el cliente y el adaptador. | No se admite el streaming de valores de nodo de un extremo a otro porque los valores de las columnas LOB se almacenan en búfer por ODP.NET y, a continuación, se realiza la actualización. Sin embargo, el streaming de valores de nodo entre el cliente y el adaptador es posible para las columnas LOB si el cliente crea el mensaje con bodyWriter. |
| Operación de eliminación de tabla | Compatible | No se admite entre el adaptador y la base de datos de Oracle. El soporte se proporciona entre el cliente y el adaptador. | No se admite el streaming de valores de nodo de un extremo a otro porque los valores de las columnas LOB se almacenan en búfer por ODP.NET y, a continuación, se realiza la eliminación. Sin embargo, el streaming de valores de nodo entre el cliente y el adaptador es posible para las columnas LOB si el cliente crea el mensaje con bodyWriter. |
| Operación de lectura LOB de tabla | Compatible | Compatible | La operación ReadLOB está diseñada principalmente para transmitir columnas de datos LOB en el modelo de servicio WCF. En el modelo de canal WCF, si el cliente consume el mensaje mediante un XmlReader (invocando el método GetReaderAtBodyContents en el mensaje de respuesta), se realiza una transmisión de valores de nodo de extremo a extremo. Esto se debe a que el adaptador devuelve un xmlReader que admite llamadas ReadValueChunk para el mensaje de respuesta ReadLOB. Sin embargo, se recomienda no usar la operación ReadLOB desde el modelo de canal WCF. Puede usar una operación Select o una operación SQLEXECUTE en su lugar. |
| Operación UpdateLOB de tabla | Compatible | Compatible | El adaptador usa xmlDictionaryWriter para consumir el mensaje de solicitud. Si el cliente usa bodyWriter para crear el mensaje de solicitud, se produce el streaming de valores de nodo de un extremo a otro para los datos LOB. |
| Operación SQLEXECUTE | Compatible | Compatible | El adaptador usa bodyWriter para crear el mensaje de respuesta. Si el cliente usa XmlDictionaryWriter para consumir el mensaje de respuesta, se produce la transmisión continua de valor de nodo de extremo a extremo para los datos LOB. No se admite el streaming de valor de nodo de un extremo a otro para el mensaje de solicitud porque el adaptador debe almacenar en búfer todos los operandos antes de poder invocar la operación en la base de datos de Oracle. |
| Procedimiento almacenado y operación de función | Compatible | Compatible | El adaptador usa bodyWriter para crear el mensaje de respuesta. Si el cliente usa XmlDictionaryWriter para consumir el mensaje de respuesta, se produce la transmisión de valores de nodo de extremo a extremo para los datos LOB. Esto significa que el streaming se admite para los parámetros OUT e IN OUT de procedimientos y funciones en el mensaje de respuesta. No se admite el streaming de valor de nodo de un extremo a otro para el mensaje de solicitud porque el adaptador debe almacenar en búfer todos los operandos antes de poder invocar la operación en la base de datos de Oracle. |
| Operación POLLINGSTMT | Compatible | Compatible | El adaptador usa bodyWriter para crear el mensaje de solicitud POLLINGSTMT. Si el cliente consume el mensaje mediante XmlDictionaryWriter, se produce la transmisión de valores de nodo para las columnas LOB. |
Para obtener información sobre cómo implementar el streaming de datos LOB en el código al usar el modelo de canal WCF, vea Streaming oracle Database LOB Data Types Using the WCF Channel Model.
Compatibilidad con streaming en el modelo de servicio WCF
Serializar y deserializar entre la representación XML de un mensaje y la representación de objeto de código administrado de ese mensaje requiere escribir y leer todo el mensaje en la memoria. Por este motivo, no se admite el streaming de nodos ni el streaming de valor de nodo para la mayoría de las operaciones.
La única excepción a esto es la operación ReadLOB. Esta operación se implementa específicamente para admitir la transmisión de principio a fin para leer las columnas LOB de tabla y vista en el modelo de servicio WCF.
Compatibilidad con streaming en BizTalk Server
En la tabla siguiente se proporciona información detallada sobre cómo se admite el streaming en BizTalk Server. (Todas las referencias al "adaptador" hacen referencia al adaptador de base de datos de Oracle; el adaptador de WCF-Custom siempre se conoce por su nombre completo en esta tabla).
| Operación | Streaming de nodos | Node-Value en streaming | Descripción |
|---|---|---|---|
| Operación de inserción de tabla | Compatible* | No se admite entre el adaptador y la base de datos de Oracle; sin embargo, los datos se transmiten entre BizTalk Server y el adaptador. | No se admite el streaming de valores de nodo de un extremo a otro porque los valores de las columnas LOB se almacenan en búfer mediante ODP.NET y, a continuación, se realiza la inserción. Sin embargo, el streaming de valores de nodo entre BizTalk Server y el adaptador es compatible con los tipos de datos LOB porque el adaptador de WCF-Custom crea el mensaje con bodyWriter. |
| Operación de selección de tabla | Compatible | Compatible | El adaptador de WCF-Custom usa XmlDictionaryWriter para consumir el mensaje de respuesta, por lo que se admite el streaming de valores de nodo de un extremo a otro para los tipos LOB. |
| Operación de actualización de tabla | Compatible | No se admite entre el adaptador y la base de datos de Oracle; sin embargo, los datos se transmiten entre BizTalk Server y el adaptador. | No se admite el streaming de valores de nodo de un extremo a otro porque los valores de las columnas loB se almacenan en búfer ODP.NET y, a continuación, se realiza la actualización. Sin embargo, el streaming de valores de nodo entre BizTalk Server y el adaptador es compatible con los tipos de datos LOB porque el adaptador de WCF-Custom crea el mensaje con bodyWriter. |
| Operación de eliminación de tabla | Compatible | No se admite entre el adaptador y la base de datos de Oracle; sin embargo, los datos se transmiten entre BizTalk Server y el adaptador. | No se admite el streaming de valores de nodo de un extremo a otro porque los valores de las columnas LOB se almacenan en búfer por ODP.NET y, a continuación, se realiza la eliminación. Sin embargo, el streaming de valores de nodo entre BizTalk Server y el adaptador es compatible con los tipos de datos LOB porque el adaptador de WCF-Custom crea el mensaje con bodyWriter. |
| Operación de lectura LOB de tabla | La operación ReadLOB no es compatible con BizTalk Server. | La operación ReadLOB no es compatible con BizTalk Server. | La operación ReadLOB no es compatible con BizTalk Server. Use la operación Select o una operación SQLEXECUTE en su lugar. |
| Operación UpdateLOB de tabla | Compatible | Compatible | El adaptador de WCF-Custom usa bodyWriter para crear el mensaje de solicitud, por lo que se admite el streaming de valores de nodo de un extremo a otro para los tipos de datos LOB. |
| Operación SQLEXECUTE | Compatible | Compatible | El adaptador de WCF-Custom usa XmlDictionaryWriter para consumir el mensaje de respuesta, por lo que se admite el streaming de valores de nodo de un extremo a otro para los tipos de datos LOB en el mensaje de respuesta. No se admite el streaming de valor de nodo de un extremo a otro para el mensaje de solicitud porque el adaptador debe almacenar en búfer todos los operandos antes de poder invocar la operación en la base de datos de Oracle. |
| Procedimiento almacenado y operación de función | Compatible | Compatible | El adaptador de WCF-Custom usa XmlDictionaryWriter para consumir el mensaje de respuesta, por lo que se admite el streaming de valores de nodo de un extremo a otro para los tipos de datos LOB en el mensaje de respuesta. (Esto significa que el streaming se admite para los parámetros OUT e IN OUT de procedimientos y funciones en el mensaje de respuesta). No se admite el streaming de valor de nodo de un extremo a otro para el mensaje de solicitud porque el adaptador debe almacenar en búfer todos los operandos antes de poder invocar la operación en la base de datos de Oracle. |
| Operación POLLINGSTMT | Compatible | Compatible | El adaptador de WCF-Custom usa xmlDictionaryWriter para consumir el mensaje de solicitud (entrante), por lo que se admite el streaming de valores de nodo de un extremo a otro para los tipos de datos LOB. |