ODP.NET Oracle.ManagedDataAccess causa la fine della sessione di rete ORA-12537

Panoramica

Voglio sostituire Oracle.DataAccess con Orcale. Managed DataAccess, ma l’apertura di una connessione con quest’ultima genera un’eccezione di fine sessione di rete ORA-12537 .

Eccezione messaggio / traccia dello stack

{OracleInternal.Network.NetworkException (0x000030F9): ORA-12537 : Netzwerksession: Dateiende su OracleInternal.Network.ReaderStream.Read (OraBuf OB) su OracleInternal.TTC.OraBufReader.GetDataFromNetwork () su OracleInternal.TTC.OraBufReader.Read (Boolean bIgnoreData ) su OracleInternal.TTC.MarshallingEngine.UnmarshalUB1 (Boolean bIgnoreData) su OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse ()}

Sto cercando di connettermi a un database Oracle 11g e non ho un client installato sul mio computer locale.

Applicazione di test di lavoro (non gestita)

L’utilizzo di Oracle.DataAccess funziona correttamente.

using System; using Oracle.DataAccess.Client; namespace App.Odp.Unmanaged { internal class Program { private static void Main(string[] args) { //dummy connection string. using SID string connectionString = "User Id=***;password=***;Data Source=1.2.3.4:1521/sid01;"; try { using (var conn = new OracleConnection(connectionString)) { conn.Open(); using (OracleCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from all_users"; using (OracleDataReader reader = cmd.ExecuteReader()) { Console.WriteLine("VisibleFieldCount: {0}", reader.VisibleFieldCount); Console.WriteLine("HiddenFieldCount: {0}", reader.HiddenFieldCount); } } } } catch (Exception ex) { Console.WriteLine("Error:{0}", ex.Message); } Console.ReadLine(); } } } 

Riferimenti e dipendenze

  • Oracle.DataAccess (2.111.7.0)
  • oci.dll (11.1.0.1)
  • orannzsbb11.dll (11.1.0.6)
  • oraociei11.dll (Oracle Call Interface Instant Client)
  • OraOps11w.dll (2.111.7.0)

Impostazioni del progetto

Targa di destinazione x86
Framework di riferimento 4.5

Applicazione di test non riuscita (gestita)

Utilizzo del pacchetto nuget Oracle ufficiale ODP.NET, Driver gestito 12.1.21

Il codice è identico a quello sopra. Cambia solo:

 using System; using Oracle.ManagedDataAccess.Client; //... rest the same as above 

Riferimenti e dipendenze

Solo:

  • Oracle.ManagedDataAccess (4.121.2.0)

Impostazioni del progetto

Target plattform Qualsiasi CPU
Framework di riferimento 4.5

App.config

    
<!----> <!---->

Ho provato diverse impostazioni (NTS, none, tutte) e ho modificato la stringa di connessione su User Id = XXX; password = XXX; Data Source = MyDataSource; , ma l’errore rimane lo stesso.

Domande

  • Quale potrebbe essere la causa dell’eccezione di fine sessione del file di rete ORA-12537 ?
  • Manca un riferimento / dipendenza?
  • Qualcosa deve essere configurato sul server DB?

AGGIORNARE

Sul server stiamo ottenendo un ORA-12679: servizi nativi disabilitati da altri processi ma richiesto errore nel file alert.log.

Sembra avere qualcosa a che fare con la crittografia. Commentando le seguenti righe nei server sqlnet.ora risolve il problema.

 #SQLNET.AUTHENTICATION_SERVICES=(NTS) #SQLNET.ENCRYPTION_TYPES_SERVER = (rc4_128, rc4_256) #SQLNET.ENCRYPTION_SERVER=REQUIRED #ENCRYPTION_WALLET_LOCATION= # (SOURCE=(METHOD=FILE)(METHOD_DATA= # (DIRECTORY=...\%ORACLE_SID%\wallet))) 

Nuova domanda

Come configuriamo ManagedDataAccess in modo che funzioni con la crittografia?

Aggiornamento 2

Sembra funzionare ora con ODP Managed Driver 12c:
https://www.nuget.org/packages/Oracle.ManagedDataAccess/

Modifica: ora ASO è supportato. Eseguire l’aggiornamento a ODAC 12c versione 4 o successive. Se ciò non risolve il tuo problema, controlla alert.log sul server del database e investiga (google) eventuali errori che si verificano lì quando tenti di connetterti.


Risposta originale:

Al momento della stesura di questo documento (30/4/15) non esiste alcun supporto per la crittografia ASO (Advanced Security Option) di Oracle con il driver gestito ODP.NET, che è ciò che causa i vostri errori.

Molto probabilmente sarà supportato in futuro, quindi se stai leggendo questo in un secondo momento, controlla gli ultimi documenti di ODP.NET per vedere se è necessario un aggiornamento di ODP.NET.

http://docs.oracle.com/cd/E56485_01/win.121/e55744/InstallConfig.htm#CHDJIDIG

A partire dal 5 ottobre 2015, il driver Oracle.ManagedDataAccess (ODAC 12c Release 4) supporta ASO.

https://apex.oracle.com/pls/apex/f?p=18357:39:18138408495219::NO::P39_ID:28201

Assicurati di non avere versioni precedenti di Oracle.ManagedDataAccess nel GAC. Sembra che diverse versioni della dll abbiano la stessa AssemblyVersion.

Avevo una versione precedente in GAC CLR 4 (C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL per me) che è stata installata con un client Oracle 12.1.

Poiché dll: s nel GAC sono sempre utilizzati per primi, è stata usata la vecchia versione di ASO-incaptable, ma ho pensato di utilizzare la versione più recente.

La soluzione era disinstallare la versione precedente dal GAC. La prima fase di installazione nel file Leggimi del pacchetto Nuget 12.1.2400 è “Un-GAC e annulla la configurazione di qualsiasi assieme esistente”.

Anch’io ho faticato con questo errore. Finalmente ho provato con Oracle.ManagedDataAccess.dll per 12c (versione 4.122.1.0). Creato un riferimento per sopra dll dalla directory ODAC installata (\ odp.net \ managed \ common), ha funzionato … !!! Condividere la mia soluzione.

Ho avuto alcuni degli stessi problemi. Trovato una voce nel registro: HKEY_LOCAL_MACHINE \ SOFTWARE \ wow6432 \ oracle. Se questa parte contiene una voce ODP.NET.managed, ansible con un’altra chiave (nome versione dipendente) controlla se questo entyr contiene una stringa chiamata TNS_ADMIN. Questa stringa deve essere cancellata o il valore modificato in una directory non esistente. Se la stringa esiste e punta a una directory valida, il Managed Client non utilizza l’impostazione dal file di configurazione e fallisce. Ulteriori indagini dovrebbero essere usate, ma ho le mie cose funzionanti e devo rimandare il resto ….