Risolvere i problemi operativi relativi all'adapter Oracle Database
Risoluzione dei problemi relativi alle tecniche per risolvere gli errori operativi che possono verificarsi usando l'adapter Microsoft BizTalk per Oracle Database.
Abilitare la traccia
Per informazioni sul supporto della traccia nell'adapter Oracle Database, vedere Traccia diagnostica e registrazione dei messaggi per l'adapter Oracle Database.
Problemi noti
Di seguito sono riportati gli errori più comuni che possono verificarsi quando si usa l'adapter Oracle Database, insieme alla loro probabile causa e risoluzione.
Errore durante il caricamento delle associazioni dell'adapter
Problema
Quando si tenta di avviare il plug-in Add Adapter Service Reference di Visual Studio o il componente aggiuntivo Consume Adapter Service BizTalk Project, viene visualizzato l'errore seguente:
There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.
Causa
Quando si tenta di avviare il plug-in Add Adapter Service Reference o il componente aggiuntivo Consume Adapter Service , WCF carica le associazioni di adapter per tutte le schede installate. A sua volta, le associazioni dell'adattatore dipendono dal software client specifico per l'applicazione aziendale. Questo problema può verificarsi per uno o entrambi i motivi seguenti:
Il software client LOB richiesto non è installato nel computer in cui è stata installata la scheda.
È stata eseguita un'installazione tipica o completa dell'adapter, che installa tutte le schede contenute nel Pacchetto adapter BizTalk. Tuttavia, le librerie client line-of-business potrebbero essere installate per una sola applicazione aziendale. Di conseguenza, l'interfaccia utente grafica non carica le associazioni per gli altri adattatori.
Risoluzione
Assicurarsi che le versioni del client LOB necessarie siano installate nel computer in cui è stato installato BizTalk Adapter Pack. I sistemi Line-of-Business e Enterprise supportati elencano le versioni client supportate.
Assicurarsi di eseguire un'installazione personalizzata degli adapter per installare solo la scheda necessaria.
Nota
Per assicurarsi che l'applicazione funzioni con la versione più recente di ODP.NET, è necessario che le DLL dei criteri siano installate nel computer e registrate nella GAC. Per altre informazioni, vedere Provider di dati Oracle per .NET nel sito Web di Oracle.
L'adattatore di database Oracle non viene visualizzato nell'elenco di schede nella console di amministrazione di BizTalk Server
Problema
L'adapter Oracle Database inlcuded con BizTalk Adapter Pack non è elencato nell'elenco di adapter nella console di amministrazione di BizTalk Server.
Causa
L'adapter Oracle Database è un'associazione personalizzata WCF. Pertanto, anche se la console di amministrazione di BizTalk Server visualizza l'adattatore WCF-Custom, non visualizza le associazioni personalizzate WCF e pertanto non visualizza l'adapter Oracle Database basato su WCF.
Risoluzione
È possibile aggiungere in modo esplicito l'adapter Oracle Database alla console di amministrazione di BizTalk Server seguendo la procedura descritta in Aggiunta dell'adapter di database Oracle a BizTalk Server Administration Console.
Errore durante il recupero dell'output XML con più di 65.536 nodi
Problema
L'adattatore restituisce l'errore seguente durante il recupero dell'output XML con più di 65.536 nodi.
Maximum number of items that can be serialized or deserialized in an object graph is '65536'.
Change the object graph or increase the MaxItemsInObjectGraph quota.
Causa
L'adattatore non può serializzare e deserializzare un oggetto con più di 65.536 elementi.
Risoluzione
È possibile risolvere questo problema impostando il maxItemsInObjectGraph
parametro . È possibile impostare questa impostazione in uno dei due modi seguenti:
Impostare questo parametro modificando il
maxItemsInObjectGraph
parametro nell'attributo nellaServiceBehavior
classe del servizio.Aggiungere quanto segue al file di app.config dell'applicazione.
<behaviors> <endpointBehaviors> <behavior name="NewBehavior"> <dataContractSerializer maxItemsInObjectGraph="65536000" /> </behavior> </endpointBehaviors> </behaviors>
Un esempio app.config ha un aspetto simile al seguente.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="NewBehavior">
<dataContractSerializer maxItemsInObjectGraph="65536000" />
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint behaviorConfiguration="NewBehavior" binding="oracleDBBinding"
contract="IOutboundContract" name="oracle_ICalculator" />
</client>
</system.serviceModel>
</configuration>
Errore durante l'esecuzione di operazioni nel database Oracle
Problema
L'adattatore restituisce l'errore seguente durante l'esecuzione di qualsiasi operazione nel database Oracle usando BizTalk Server.
Per BizTalk Server
System.ArgumentNullException: Value cannot be null.
Causa
L'azione WCF per il messaggio non è specificata. WCF richiede che venga specificata un'azione SOAP per ogni operazione, che informa l'adattatore sull'operazione da eseguire nell'applicazione LOB.
Risoluzione
Specificare l'azione SOAP nella porta di trasmissione o come proprietà di contesto del messaggio in un'orchestrazione BizTalk. Per istruzioni, vedere Configurare l'azione SOAP per Oracle Database. Vedere Messaggi e schemi di messaggio per visualizzare un elenco di azioni per ogni operazione.
XmlReaderParsingException a causa di un nome di operazione non corretto nell'azione specificata
Problema
La console di amministrazione di BizTalk Server restituisce l'errore seguente quando si inviano messaggi a un database Oracle:
Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Invalid argument:
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="<operation_name>" Action="<action>" />
</BtsActionMapping>
Causa
Se si configura una porta WCF-Custom importando il file di associazione delle porte creato dal componente aggiuntivo Progetto BizTalk del servizio adapter di utilizzo, l'azione nella porta viene specificata nel formato seguente:
<BtsActionMapping>
<Operation Name="Op1" Action="http://MyService/Svc/Op1" />
</BtsActionMapping>
Nel formato precedente, il nome dell'operazione è regolato dall'operazione scelta durante la generazione dello schema. Ad esempio, se è stato generato lo schema per l'operazione Inserisci in una tabella, il nome dell'operazione nell'azione sarà "Inserisci". Tuttavia, il nome dell'operazione nella porta logica creata nell'orchestrazione BizTalk in Visual Studio potrebbe essere diverso.
Risoluzione
Assicurarsi che i nomi delle operazioni nella porta logica (nell'orchestrazione BizTalk in Visual Studio) e nella porta fisica (in BizTalk Server Console di amministrazione) siano uguali.
Errore durante la specifica di un URI di connessione per una porta WCF-Custom in BizTalk
Problema
BizTalk Server restituisce l'errore seguente quando si specifica un URI di connessione per la connessione al database Oracle.
Error saving properties.
(System.ArgumentException) The specified address is invalid.
(System.ArgumentException) Invalid address;
"<connection URI>" is not a well-formed absolute uri.
Causa
L'URI di connessione non rispetta il formato di codifica standard. Ad esempio, il valore di un parametro può contenere uno spazio.
Risoluzione
Assicurarsi che l'URI di connessione specificato sia conforme al formato di codifica standard. Ad esempio, uno spazio vuoto deve essere sostituito da "%20".
Eccezione del cursore non valida durante la chiamata di stored procedure che accettano parametri REF CURSOR
Problema
Quando si richiamano le procedure nel database Oracle che accettano input REF CURSOR, è possibile che venga generata l'eccezione seguente:
Microsoft.ServiceModel.Channels.Common.TargetSystemException: ORA-01001: invalid cursor ---> Oracle.DataAccess.Client.OracleException
Causa
Il blocco PL/SQL per la procedura che si sta richiamando potrebbe eseguire il piping dei CURSOR REF, ovvero il CURSORE IN REF potrebbe essere assegnato a OUT REF CURSOR.
Risoluzione
Il blocco PL/SQL non deve inviare tramite pipe l'IN ai CURSOR REF OUT senza l'elaborazione appropriata.
Errore durante la convalida della risposta per l'operazione ReadLOB tramite BizTalk Server
Problema
Durante l'esecuzione di un'operazione ReadLOB tramite l'adapter Oracle Database con BizTalk Server, la risposta del database Oracle non riesce a convalidare il linguaggio WSDL (Web Services Description Language).
Causa
WSDL contiene un nome di nodo StreamBody definito per l'esecuzione di richieste basate sul servizio, ma non è necessario per gli scenari BizTalk. Pertanto, quando il codice XML di output, che non contiene il nodo StreamBody, viene confrontato con WSDL, la convalida ha esito negativo.
Risoluzione
Rimuovere il nodo StreamBody dal file WSDL durante la convalida dell'output generato usando BizTalk Server. Eseguire quindi la procedura seguente:
Il file WSDL contenente il nodo StreamBody è simile al seguente.
<xs:element name="ReadLOBResponse"> <xs:annotation> <xs:documentation> <doc:action xmlns:doc="http://schemas.microsoft.com/servicemodel/adapters/metadata/documentation">http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/TBL_ALL_DATATYPES/ReadLOB/response\</doc:action> </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="ReadLOBResult" nillable="true" type="ns3:StreamBody" /> </xs:sequence> </xs:complexType> </xs:element>
Sostituire il precedente con il codice seguente.
<xs:element name="ReadLOBResponse"> <xs:annotation> <xs:documentation> <doc:action xmlns:doc="http://schemas.microsoft.com/servicemodel/adapters/metadata/documentation">http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/TBL_ALL_DATATYPES/ReadLOB/response\</doc:action> </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="ReadLOBResult" type="xs:base64Binary" /> </xs:sequence> </xs:complexType> </xs:element>
In questo passaggio è stato rimosso il riferimento a type="ns3:StreamBody" nell'XSD originale e sostituito con type="xs:base64Binary". Inoltre, è stato rimosso il valore nillable="true" dall'XSD originale.
Rimuovere quanto segue da WSDL.
<xs:complexType name="StreamBody"> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="Stream"> <xs:simpleType> <xs:restriction base="xs:base64Binary"> <xs:minLength value="0" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> <xs:element name="StreamBody" nillable="true" type="ns3:StreamBody" />
Nota
L'operazione ReadLOB non è supportata con BizTalk Server. È consigliabile usare un'operazione Select della tabella per leggere i dati LOB da una soluzione di BizTalk Server.
La convalida dello schema potrebbe non riuscire negli scenari di polling
Problema
La convalida dello schema ha esito negativo negli scenari in cui l'adapter di database Oracle esegue il polling di tabelle di database contenenti campi di tipo ROWID o UNROWID.
Causa
In fase di progettazione, quando l'adattatore genera metadati per la tabella contenente campi di tipo ROWID o UNROWID, lo schema include "nillable=false", il che significa che i campi di tipo ROWID o UNROWID non possono essere Null. Tuttavia, in fase di esecuzione quando l'adattatore recupera i metadati, i campi di tipo ROWID o UNROWID contengono valori Null. Di conseguenza, la convalida dello schema ha esito negativo.
Risoluzione
Se si usa l'adattatore Oracle Database con BizTalk Server, è possibile scegliere di disabilitare la convalida dello schema. In alternativa, è possibile modificare manualmente lo schema per modificare "nillbale=true" per i tipi di dati ROWID e UNROWID.
Errore di conversione nonsonabile richiesto durante l'esecuzione di stored procedure con tipi di record come parametri
Causa
Si consideri uno scenario in cui una stored procedure Oracle accetta un tipo di record come parametro. Si supponga che il tipo di record sia dichiarato come <nome> tabella%ROWTYPE, dove la tabella ha una colonna di tipo di dati LONG. Quando l'adattatore Oracle Database rileva il tipo di dati LONG, imposta le dimensioni del tipo di dati uguale al valore specificato per la proprietà di associazione LongDatatypeColumnSize . Tuttavia, il database Oracle non definisce una dimensione per il tipo di dati LONG. Pertanto, quando l'adattatore richiama la stored procedure, viene generato un errore di conversione nonsonabile richiesto.
Risoluzione
Se un tipo di record ha un tipo di dati LONG, è necessario definirlo in modo esplicito come parte di un pacchetto.
L'adattatore non riconosce l'azione sulla porta fisica anche se si utilizza il file di associazione generato dal componente aggiuntivo Consume Adapter Service per creare le porte
Problema
Dopo aver usato il componente aggiuntivo Consume Adapter Service per generare lo schema per un'operazione specifica nel database Oracle, il componente aggiuntivo crea anche un file di associazione di porte. È possibile importare questo file di associazione usando la console di amministrazione di BizTalk Server per creare porte fisiche in BizTalk Server. Tuttavia, quando si inviano messaggi al database Oracle usando tali porte, l'adapter non riesce a comprendere l'azione specificata sulla porta e restituisce un errore simile al seguente:
Microsoft.ServiceModel.Channels.Common.UnsupportedOperationException: Incorrect Action
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="<op_name>" Action="<action>" />
</BtsActionMapping>. Correct the specified Action, or refer to the documentation on the allowed formats for the Actions.
Causa
Quando si creano porte logiche in un'orchestrazione BizTalk, si specificano determinati nomi per le operazioni su tali porte oppure si usano semplicemente i nomi predefiniti come Operation_1, Operation_2 e così via. Tuttavia, nel file di associazione generato dal componente aggiuntivo Consume Adapter Service ,il nome dell'operazione corrisponde al nome dell'operazione di database Oracle per cui si generano i metadati. Ad esempio, se si generano metadati per l'operazione Select nella tabella ACCOUNTACTIVITY nel database Oracle, l'azione verrà impostata su quanto segue:
<Operation Name="Select" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY/Select" />
Quando si importa il file di associazione, la stessa azione viene impostata sulla porta fisica. Pertanto, i nomi delle operazioni sulla porta logica (Operation_1, Operation_2 e così via) non corrispondono ai nomi delle operazioni specificate nell'azione sulla porta fisica, causando un errore.
Risoluzione
Assicurarsi che il nome dell'operazione nella porta logica corrisponda al nome dell'operazione specificato come parte dell'azione nella porta fisica. Eseguire una delle operazioni seguenti:
Modificare il nome dell'operazione nella porta logica nell'orchestrazione BizTalk da Operation_1 e così via all'operazione per cui si generano metadati, ad esempio Select.
Modificare il nome dell'operazione nell'azione sulla porta fisica impostando il nome dell'operazione nella porta logica. Ad esempio, è possibile modificare l'azione nella porta fisica in modo che sia simile alla seguente:
<Operation Name="Operation_1" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY/Select" />
L'adapter genera un'eccezione di overflow ("System.OverflowException") durante l'esecuzione di un'operazione
Problema
Se si tenta di eseguire un'operazione contenente tipi di dati numerici Oracle all'interno di Set di dati o cursori REF di tipo debole, l'adattatore potrebbe generare un'eccezione di overflow.
Causa
Ciò si verifica se si specifica un valore di grandi dimensioni per il tipo di dati numerico Oracle all'interno di DataSet o cursori REF di tipo debole che non possono essere inseriti nel rispettivo tipo .NET.
Risoluzione
Se si desidera passare valori di grandi dimensioni per il tipo di dati numerico Oracle all'interno di DataSet o cursori REF con tipizzazione debole, è necessario abilitare la digitazione sicura impostando il valore della proprietà di associazione EnableSafeTyping su true. L'abilitazione della digitazione sicura espone il tipo di dati numerico Oracle all'interno di Set di dati o cursori REF con tipizzazione debole come stringhe.
Errore con RootNode TypeName nei progetti BizTalk
Problema
In un progetto BizTalk in Visual Studio, se gli schemi generati dal componente aggiuntivo Consume Adapter Service contengono caratteri non validi o parole riservate per la proprietà RootNode TypeName , si verificherà l'errore seguente durante la compilazione del progetto:
Node <node reference> - Specify a valid .NET type name for this root node.
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).
Risoluzione
Fare clic con il pulsante destro del mouse sul nodo di roaming a cui si fa riferimento nell'errore e scegliere Proprietà.
Per la proprietà RootNode TypeName , rimuovere eventuali caratteri non validi o parole riservate, ad esempio dot (.).
Avviso di associazione non valido quando si usa l'adapter in Visual Studio
Problema
Quando si usa l'adattatore per creare un'applicazione in Visual Studio 2013 e si apre il file di configurazione (app.config) generato dall'adattatore, viene visualizzato un avviso simile al seguente:
The element 'bindings' has invalid child element 'oracleDBBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...
Causa
Questo avviso viene visualizzato perché l'associazione dell'adapter Oracle Database, oracleDBBinding
, non è un'associazione standard fornita con Windows Communication Foundation (WCF).
Risoluzione
È possibile ignorare questo avviso.
BizTalk Server genera un'eccezione se si usano più schemi di notifica nella stessa applicazione o si usa lo schema di notifica in più applicazioni nello stesso host
Problema
BizTalk Server genera un'eccezione XLANG o un'eccezione che indica che l'applicazione non è in grado di individuare la specifica del documento perché più schemi corrispondono al tipo di messaggio.
Causa
Ciò si verifica a causa di una delle condizioni seguenti:
Sono stati generati più schemi di notifica in un progetto di BizTalk Server, distribuiti in un'applicazione BizTalk Server ed è stata quindi eseguita l'applicazione per ricevere notifiche dal database Oracle. Poiché gli schemi di notifica sono comuni, esiste un conflitto tra gli schemi distribuiti nell'applicazione BizTalk Server.
In caso di più progetti, è stato generato uno schema di notifica per ognuno dei progetti BizTalk Server, distribuito ogni progetto in un'applicazione BizTalk Server separata nello stesso host ed è stata quindi eseguita un'applicazione o un'applicazione per ricevere notifiche dal database Oracle. Poiché gli schemi e gli assembly sono accessibili tra le applicazioni in BizTalk Server, esiste un conflitto tra gli schemi comuni distribuiti in varie applicazioni e assembly BizTalk Server.
Risoluzione
Usare un singolo file di schema di notifica per un'applicazione BizTalk Server. Se è necessario usare lo schema di notifica in più applicazioni BizTalk Server nello stesso host, creare un'applicazione contenente un singolo schema di notifica e quindi usare lo schema di notifica di tutte le altre applicazioni in BizTalk Server.
L'utilizzo della memoria e il numero di thread aumenta quando si usa l'adapter in un'operazione in ingresso transazionata
Problema
In un'operazione in ingresso transazionata, ad esempio polling, se non sono disponibili dati nella tabella di cui viene eseguito il polling e l'adapter continua a eseguire il polling, nel corso di un periodo di tempo si verifica un aumento dell'utilizzo della memoria e del conteggio dei thread.
Causa
Se non sono disponibili dati nella tabella di cui viene eseguito il polling, dopo ogni ciclo di timeout di ricezione, Windows Communication Foundation (WCF) genera un nuovo thread per continuare l'operazione di polling. Di conseguenza, il numero di thread e l'utilizzo della memoria aumentano in un periodo di tempo. Tuttavia, se la tabella sottoposta a polling contiene alcuni dati, lo stesso thread continua a eseguire tutti i sondaggi successivi.
Risoluzione
È consigliabile impostare ReceiveTimeout sul valore massimo possibile, ovvero 24.20:31:23.6470000 (24 giorni) in modo che venga generato un nuovo thread solo ogni 24 giorni. In questo modo, l'utilizzo della memoria e il numero di thread non aumentano troppo presto.
Nota
Se SqlAdapterInboundTransactionBehavior è stato impostato, assicurarsi che TransactionTimeout sia configurato anche sul valore massimo possibile, ovvero 24.20:31:23.64700000 (24 giorni). Quando si usa questa soluzione alternativa, è possibile aggiungere SqlAdapterInboundTransactionBehavior solo se è necessario configurare il livello di isolamento della transazione. In caso contrario, è consigliabile rimuovere tale comportamento.
Per altre informazioni sulla proprietà di associazione ReceiveTimeout , vedere Informazioni sulle proprietà di associazione dell'adapter Oracle Database. Per istruzioni sulla specifica delle proprietà di associazione, vedere Configurare le proprietà di associazione per Oracle Database.
Nota
Quando si usa l'adattatore con BizTalk Server, l'impostazione del timeout su un valore elevato non influisce sulla funzionalità dell'adattatore.
Vedere anche
Risolvere i problemi diinstallazione dell'adapter Oracle Database con l'adapter Oracle Database