2011-11-29 20 views
7

Ho un ambiente di test per un servizio che verrà utilizzato dal mio sito e un ambiente di produzione. Nel mio ambiente di test ho installato ODP.net sul server. Quel servizio che usa Oracle sembra funzionare abbastanza bene finora. Non sembra che un client Oracle sia in esecuzione su quel server. D'altra parte ho un server che ha un client Oracle su di esso, ma non sembra che ODP.net sia installato su di esso (sono in procinto di doppio controllo, ma questa è la situazione come da questa domanda SO) . Sul server di produzione ottengo questa eccezione:Installazione di ODP.net sul server per risolvere Oracle.DataAccess.Client.OracleException: il provider non è compatibile con la versione del client Oracle

Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client 

in entrambi i server che ho la dll Oracle.DataAccess nel cestino e cartelle lib (non credo ci sia bisogno nella cartella lib, ma perché affondare la barca ... Sono sicuro che puoi trovare una buona ragione, ma non adesso !!!). La mia domanda è: ho bisogno di installare ODP.net sul server di produzione? Questo ha risolto eventuali problemi che hai incontrato? Ho visto alcuni post SO che dicono che questo ha risolto un problema simile per loro. Potresti raccomandare una linea d'azione? Grazie!

risposta

12

Ci sono molte piccole versioni secondarie del client Oracle e ciò che è probabilmente accaduto è che i client Oracle installati sulla macchina che danno l'errore non sono esattamente la stessa versione del file Oracle.DataAccess.dll.

La cosa migliore da fare è assicurarsi di utilizzare esattamente lo stesso pacchetto di installazione su ogni macchina e server di sviluppo. Ciò eviterà ogni mancanza di corrispondenza.

In alternativa, quello che ho fatto in passato per risolvere questo (e non può essere la cosa "migliore" da fare, ma di solito funziona per me) è di anche copiare il file OraOps11.dll a la tua directory \bin, insieme al file Oracle.DataAccess.dll.

Ottieni il file dalla stessa installazione di oracle sulla stessa macchina in cui hai ottenuto Oracle.DataAccess.dll. Dovrebbe essere in una cartella denominata qualcosa come questo, a seconda di dove è stato installato Oracle, e che versione:

C: \ oracle \ product \ 11.1.0 \ Client_1 \ bin \ OraOps11.dll

+0

Qual è OraOps11.dll e che cosa fa? E questo sarebbe nel cestino della mia domanda, giusto? – SoftwareSavant

+0

Btw, la versione che sto utilizzando è stata modificata l'11/9/2010 all'1: 48. Quindi sono abbastanza sicuro che sia la stessa versione. Sono entrambi la versione a 64 bit. – SoftwareSavant

+0

Non sono del tutto sicuro di cosa faccia OraOps11.dll, ma sì, lo copio in qualunque cartella sia in esecuzione .exe o .dll dell'applicazione. – CodingWithSpike

0

Grazie ... questo mi ha aiutato a risparmiare tempo sulla conversione frm 32 bit a 64 bit della nostra applicazione ASP.Net ...

in dettaglio: application server alla ricerca di librerie client, anche noi usiamo i servizi remoti componente per collegare a ORACLE db ... con ORACLE client 64 bit ..

Execption ho ottenuto è stato risolto dopo la copia di questi 5 dll nella mia cartella app/bin

  1. oci.dll
  2. oraociicu11.dll
  3. oraops11w.dll
  4. orannzsbb11.dll
  5. ociw32. dll

messaggio di errore: Il tipo di inizializzazione per "Oracle.DataAccess.Types.OracleString" ha generato un'eccezione.

Dettagli di errore: System.TypeInitializationException: l'inizializzatore di tipo per 'Oracle.DataAccess.Types.OracleString' ha generato un'eccezione. ---> Oracle.DataAccess.Client.OracleException Il provider non è compatibile con la versione del client Oracle su Oracle.DataAccess.Client.OracleInit.Initialize() --- Fine della traccia dello stack di eccezioni interne ---

Server stack trace: a System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject (tipo RuntimeType) a System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject (ParseRecord pr) a System.Runtime.Serialization.Formatters.Binary .ObjectReader.ParseMember (ParseRecord pr) in System.Runtime.Serialization.Formatters.Binary._ BinaryParser.ReadObjectWithMapTyped (record BinaryObjectWithMapTyped) in System.Runtime.Serializ ation.Formatters.Binary. _BinaryParser.Run() a System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (gestore HeaderHandler, __BinaryParser serParser, booleano FVerificare, booleano isCrossAppDomain, IMethodCallMessage methodCallMessage) a System.Runtime.Serialization.Formatters.Binary.BinaryFormatter .Deserialize (stream serializationStream, gestore HeaderHandler, booleano FVerificare, booleano isCrossAppDomain, IMethodCallMessage methodCallMessage) a System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (stream serializationStream, gestore HeaderHandler, booleano FVerificare, IMethodCallMessage methodCallMessage) al sistema. Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage (IMessage msg)

Exce ption rilanciati a [0]: a System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) a System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & MSGDATA, tipo Int32)

5

questo ha lavorato per me una volta i loro corse:

OraProvCfg /action:config /product:odp /frameworkversion:v2.0.50727 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll 

OraProvCfg /action:config /product:odp /frameworkversion:v4.0.30319 /providerpath:C:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\4\Oracle.DataAccess.dll 

Buona fortuna

2

ho affrontato esattamente lo stesso problema, ho cercato di copiare tanto DLL che posso, ma senza alcuna fortuna.

Alla fine ho dovuto installare "ODTwithODAC121012" (32 bit) nel server (Win 2008 R2 64 bit).

Dopo l'installazione assicurarsi che:

  • PATH viene aggiornato con Oracle DLL posizione: \ 12.1.0 \ Client_1 \ bin e \ prodotto \ \ 12.1.0 \ Client_1
  • Riavviare il server.
  • Abilita 32 bit per il pool di applicazioni in IIS.
1

Ho eseguito con lo stesso problema in un 2012 server di Windows che avevo installato Oracle 10.2.0.3 (la versione di Oracle supossed 10.2 compatibile con 64 bit) e implementato un sito web che utilizza 10.2.0.1 Oracle client.

ho provato tutte le soluzioni in questo post, ma quello che ha funzionato forma la mia era l'ultimo punto di Abdallah risposta:

"Attiva a 32 bit per l'App Pool in IIS"

Naturalmente anche io ha dovuto schierare la mia webapp con il riferimento corretto Oracle.Data.Access (10.2.0.3)

Infine il messaggio di errore mi è stata confusa perché mi pilotato ad essere accecato per risolvere il problema di versione, ma il problema era davvero IIS non essere in grado di escludere l'app a 32 bit.

Speranza che aiuta