Ottenere metadati usando WS-Metadata Exchange in Oracle Database
Come associazione personalizzata di Windows Communication Foundation (WCF), l'adapter Microsoft BizTalk per Oracle Database espone un endpoint di WS-Metadata Exchange (MEX) che è possibile usare per recuperare i metadati per operazioni specifiche dall'adapter Microsoft BizTalk per Oracle Database.
WCF offre un'infrastruttura avanzata per l'esportazione, la pubblicazione, il recupero e l'importazione di metadati relativi a un servizio. I servizi WCF, come l'adapter, usano metadati per descrivere come interagire con gli endpoint di servizio in modo che gli strumenti, ad esempio svcutil.exe, possano generare automaticamente codice client per l'utilizzo del servizio. WCF rappresenta i metadati per un servizio come istanza del tipo MetadataSet , fortemente legato al formato di serializzazione dei metadati definito in WS-Metadata Exchange (MEX). È possibile creare un oggetto MetadataSet per le operazioni di destinazione nell'adattatore usando metadataExchangeClient.
Il supporto WCF per lo scambio di metadati è un argomento esteso e oltre l'ambito di questa documentazione. Per altre informazioni sul supporto per i metadati in WCF, vedere Metadati. Per una descrizione particolarmente valida dell'architettura, delle classi e degli spazi dei nomi esposti da WCF per i metadati, vedere Panoramica dell'architettura dei metadati. È necessario acquisire familiarità con il contenuto correlato al recupero di metadati da un servizio WCF in questi argomenti WCF prima di procedere.
Gli argomenti seguenti contengono informazioni su come usare metadataExchangeClient per recuperare i metadati dall'adapter Oracle Database.
Uso di metadataExchangeClient per recuperare i metadati
Per usare metadataExchangeClient , è necessario specificare un URI di connessione e un'associazione (OracleDBBinding). L'URI di connessione identifica le operazioni per cui si desidera recuperare i metadati.
Le sezioni seguenti contengono informazioni su come specificare l'URI di connessione, le proprietà di associazione importanti e come usare MetadataExchangeClient per recuperare i metadati dalla scheda.
URI di connessione
Per utilizzare MetadataExchangeClient , è necessario specificare un URI di connessione Oracle che specifica un endpoint MEX e l'operazione o le operazioni per cui si desidera recuperare i metadati. Specificare un endpoint MEX e le operazioni di destinazione nell'URI di connessione nel modo seguente:
È necessario includere il parametro "wsdl" nella stringa di query. Se è il primo parametro nella stringa di query, viene specificato subito dopo il punto interrogativo (?). Se non è il primo parametro, deve essere preceduto da una e commerciale (&).
È necessario seguire il parametro "wsdl" in base a uno o più parametri "op". Ogni parametro "op" è preceduto da una e commerciale (&) e specifica l'azione del messaggio (ID nodo) di un'operazione di destinazione.
Ad esempio, l'URI di connessione seguente è destinato alle operazioni Di inserimento ed eliminazione per SCOTT. Tabella EMP. I parametri "wsdl" e "op" sono evidenziati.
"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
Per modificare lo spazio dei nomi generato per l'operazione POLLINGSTMT, è necessario specificare un parametro PollingId nella stringa di query.
Il modo in cui si passa l'URI di connessione a MetadataExchangeClient dipende da quale dei metodi di overload usati per creare il client e recuperare i metadati dalla scheda.
Per altre informazioni sull'URI di connessione Oracle, vedere Creare l'URI di connessione di Oracle Database.
Proprietà di associazione
Quando si crea MetadataExchangeClient, è necessario specificare oracleDBBinding.
Esistono diverse proprietà di associazione che influiscono sul modo in cui l'adattatore genera i metadati. Le proprietà sono riportate di seguito:
EnableSafeTyping
UseSchemaInNamespace
PollingStatement
Importante
Per recuperare i metadati per l'operazione POLLINGSTMT, è necessario impostare la proprietà di associazione PollingStatement .
È necessario assicurarsi che queste proprietà di associazione siano impostate sui valori necessari per l'applicazione prima di richiamare il metodo GetMetadata in MetadataExchangeClient. Per altre informazioni sulle proprietà di associazione dell'adattatore Oracle Database, vedere Informazioni sulle proprietà di associazione dell'adapter Oracle Database.
Esempio
Nell'esempio seguente viene utilizzato un oggetto MetadataExchangeClient per creare una descrizione del servizio (documento WSDL) per le operazioni Insert, Update, Delete e Select su SCOTT. Tabella EMP. Il file WSDL viene salvato in un file, 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");
}
}
}
}