Obtener metadatos mediante WS-Metadata Exchange en Oracle Database
Como enlace personalizado de Windows Communication Foundation (WCF), el adaptador de Microsoft BizTalk para oracle Database expone un punto de conexión de WS-Metadata Exchange (MEX) que puede usar para recuperar metadatos para operaciones específicas del adaptador de Microsoft BizTalk para oracle Database.
WCF proporciona una infraestructura enriquecida para exportar, publicar, recuperar e importar metadatos sobre un servicio. Los servicios WCF, como el adaptador, usan metadatos para describir cómo interactuar con los puntos de conexión de servicio para que las herramientas, como svcutil.exe, puedan generar automáticamente código de cliente para consumir el servicio. WCF representa los metadatos de un servicio como una instancia del tipo MetadataSet , que está fuertemente vinculado al formato de serialización de metadatos definido en WS-Metadata Exchange (MEX). Puede crear un MetadataSet para las operaciones de destino en el adaptador mediante metadataExchangeClient.
La compatibilidad con WCF para el intercambio de metadatos es un tema expansivo y fuera del ámbito de esta documentación. Para obtener más información sobre la compatibilidad con metadatos en WCF, vea Metadatos. Para obtener una descripción especialmente buena de la arquitectura, las clases y los espacios de nombres que WCF expone para los metadatos, vea Información general sobre la arquitectura de metadatos. Debe familiarizarse con el contenido relacionado con la recuperación de metadatos de un servicio WCF en estos temas de WCF antes de continuar.
Los temas siguientes contienen información sobre cómo usar metadataExchangeClient para recuperar metadatos del adaptador de base de datos de Oracle.
Uso de MetadataExchangeClient para recuperar metadatos
Para usar metadataExchangeClient , debe especificar un URI de conexión y un enlace (OracleDBBinding). El URI de conexión identifica las operaciones para las que desea recuperar los metadatos.
Las secciones siguientes contienen información sobre cómo especificar el URI de conexión, las propiedades de enlace importantes y cómo usar metadataExchangeClient para recuperar metadatos del adaptador.
URI de conexión
Para usar MetadataExchangeClient , debe proporcionar un URI de conexión de Oracle que especifique un punto de conexión MEX y la operación u operaciones para las que desea recuperar los metadatos. Especifique un punto de conexión MEX y las operaciones de destino en el URI de conexión de la siguiente manera:
Debe incluir el parámetro "wsdl" en la cadena de consulta. Si es el primer parámetro de la cadena de consulta, se especifica justo después del signo de interrogación (?). Si no es el primer parámetro, debe ir precedido de una y comercial (&).
Debe seguir el parámetro "wsdl" por uno o varios parámetros "op". Cada parámetro "op" está precedido por una y comercial (&) y especifica la acción del mensaje (id. de nodo) de una operación de destino.
Por ejemplo, el siguiente URI de conexión tiene como destino las operaciones Insertar y Eliminar para SCOTT. Tabla EMP. Los parámetros "wsdl" y "op" están resaltados.
"oracledb://ADAPTER?wsdl&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Delete"
Nota:
Si desea modificar el espacio de nombres generado para la operación POLLINGSTMT, debe especificar un parámetro PollingId en la cadena de consulta.
La forma de pasar este URI de conexión a MetadataExchangeClient depende de cuál de los métodos sobrecargados que use para crear el cliente y recuperar metadatos del adaptador.
Para obtener más información sobre el URI de conexión de Oracle, consulte Creación del URI de conexión de Oracle Database.
Propiedades de enlace
Al crear MetadataExchangeClient, debe especificar oracleDBBinding.
Hay varias propiedades de enlace que afectan a la forma en que el adaptador genera metadatos. Estas propiedades son:
EnableSafeTyping
UseSchemaInNamespace
PollingStatement
Importante
Si desea recuperar metadatos para la operación POLLINGSTMT, debe establecer la propiedad de enlace PollingStatement .
Debe asegurarse de que estas propiedades de enlace se establecen en los valores necesarios para la aplicación antes de invocar el método GetMetadata en MetadataExchangeClient. Para obtener más información sobre las propiedades de enlace del adaptador de base de datos de Oracle, consulte Más información sobre las propiedades de enlace del adaptador de base de datos de Oracle.
Ejemplo
En el ejemplo siguiente se usa metadataExchangeClient para crear una descripción del servicio (documento WSDL) para las operaciones Insertar, Actualizar, Eliminar y Seleccionar en SCOTT. Tabla EMP. WSDL se guarda en un archivo, EmpOperations.wsdl.
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.ObjectModel;
// Needed for WCF and Oracle Adapter
using System.ServiceModel;
using Microsoft.ServiceModel.Channels;
using Microsoft.Adapters.OracleDB;
// Needced for MetadataExchangeClient class
using System.ServiceModel.Description;
// Needed for ServiceDescription class
using System.Web.Services;
namespace OracleMetadataExchange
{
class Program
{
static void Main(string[] args)
{
//create a binding
OracleDBBinding binding = new OracleDBBinding();
//create a metadata exchange client that will retrieve metadata according to the WS-MEX standard
MetadataExchangeClient client = new MetadataExchangeClient(binding);
client.SoapCredentials.UserName.UserName = "SCOTT";
client.SoapCredentials.UserName.Password = "TIGER";
//set up an endpoint address and specifies the operations for which we want metadata
string connectionUri = "oracledb://ADAPTER?wsdl"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Update"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Delete"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select";
EndpointAddress address = new EndpointAddress(connectionUri);
//get the metadata
MetadataSet ms = client.GetMetadata(address);
// Check for the metadata set size
Collection<MetadataSection> documentCollection = ms.MetadataSections;
if (documentCollection != null && documentCollection.Count > 0)
{
//get the wsdl from the metadata set
System.Web.Services.Description.ServiceDescription wsdl = (System.Web.Services.Description.ServiceDescription)documentCollection[0].Metadata;
//save the wsdl to a file
wsdl.Write("EmpOperations.wsdl");
}
}
}
}
Consulte también
Obtención de metadatos mediante programación desde la base de datos de Oracle