7 Stimmen

Installation von ODP.net auf dem Server zur Behebung von Oracle.DataAccess.Client.OracleException: Der Anbieter ist nicht mit der Version des Oracle-Clients kompatibel

Ich habe eine Testumgebung für einen Dienst, den meine Website nutzen wird, und eine Produktionsumgebung. In meiner Testumgebung habe ich ODP.net auf dem Server installiert. Dieser Dienst, der Oracle verwendet, scheint bisher ziemlich reibungslos zu laufen. Es scheint, als würde auf diesem Server überhaupt kein Oracle-Client laufen. Auf der anderen Seite habe ich einen Server, auf dem ein Oracle-Client läuft, auf dem aber anscheinend kein ODP.net installiert ist (ich bin gerade dabei, das zu überprüfen, aber das ist die Situation zum Zeitpunkt dieser S-O-Frage). Auf dem Produktionsserver erhalte ich diese Ausnahme:

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

Auf beiden Servern habe ich die Oracle.DataAccess dll im bin- und lib-Ordner (ich glaube nicht, dass ich sie im lib-Ordner brauche, aber was soll's... Ich bin sicher, dass Sie einen guten Grund finden können, aber nicht jetzt!!!). Meine Frage ist, ob ich ODP.net auf dem Produktionsserver installieren muss? Hat das irgendwelche Probleme gelöst, auf die Sie gestoßen sind? Ich habe in einigen SO-Beiträgen gelesen, dass dies ein ähnliches Problem bei ihnen gelöst hat. Können Sie eine Vorgehensweise empfehlen? Ich danke Ihnen!

12voto

CodingWithSpike Punkte 41513

Es gibt viele kleine Unterversionen des Oracle-Clients, und wahrscheinlich ist der Oracle-Client, der auf dem Rechner installiert ist, auf dem der Fehler auftritt, nicht genau die Version, die der Oracle.DataAccess.dll Datei stammt.

Am besten stellen Sie sicher, dass Sie die genau das gleiche Installationspaket auf jedem Entwicklungsrechner und Server. Dadurch wird eine Fehlanpassung vermieden.

Als Alternative habe ich in der Vergangenheit Folgendes getan (was vielleicht nicht die beste Lösung ist, aber für mich in der Regel funktioniert) auch Kopieren Sie die Datei OraOps11.dll zu Ihrem \bin Verzeichnis, zusammen mit dem Oracle.DataAccess.dll Datei.

Holen Sie sich die Datei von der gleichen Oracle-Installation auf dem gleichen Rechner, auf dem Sie die Oracle.DataAccess.dll . Er sollte sich in einem Ordner befinden, der etwa so heißt, je nachdem, wo Sie Oracle installiert haben und welche Version Sie haben:

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

5voto

Elie Punkte 129

Das hat bei mir funktioniert, sobald ich sie ausgeführt habe:

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

Viel Glück!

2voto

Abdallah Punkte 51

Ich hatte genau das gleiche Problem, ich habe versucht, so viele DLLs wie möglich zu kopieren, aber ohne Erfolg.

Am Ende musste ich "ODTwithODAC121012"(32bit) auf dem Server(Win 2008 R2 64bit) installieren.

Vergewissern Sie sich nach der Installation:

  • PATH wird mit dem Speicherort der Oracle-DLLs aktualisiert: \product\12.1.0\client_1\bin y \product\12.1.0\client_1
  • Starten Sie den Server neu.
  • Aktivieren Sie 32bit für den App Pool im IIS.

1voto

Fernando Punkte 51

Ich laufe mit dem gleichen Problem in einem Windows 2012 Server, dass ich Oracle 10.2.0.3 (die supossed Oracle 10.2 Version kompatibel mit 64 Bit) installiert hatte und eine Website, die 10.2.0.1 Oracle-Client verwendet bereitgestellt.

Ich habe alle Lösungen in diesem Beitrag ausprobiert, aber diejenige, die bei mir funktioniert hat, war der letzte Punkt von Abdallahs Antwort:

"32bit für den App-Pool im IIS aktivieren"

Natürlich musste ich auch meine Webapp mit der richtigen Oracle.Data.Access-Referenz (10.2.0.3) bereitstellen.

Schließlich verwirrte mich die Fehlermeldung, weil sie mich dazu trieb, blind zu sein, um das Versionsproblem zu lösen, aber das eigentliche Problem war, dass IIS nicht in der Lage war, eine 32-Bit-App auszuführen.

Ich hoffe, es hilft

0voto

Kishore Punkte 1

Danke... das hat mir geholfen, Zeit bei der Konvertierung von 32 Bit zu 64 Bit unserer ASP.Net-Anwendung zu sparen...

Im Detail: APP-Server auf der Suche nach Client-Bibliotheken, auch wir verwenden Remoting-Komponente zur Verbindung mit ORACLE db... mit ORACLE-Client 64 bit...

Das Problem wurde gelöst, nachdem ich diese 5 dlls in meinen app/bin-Ordner kopiert hatte

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

Fehlermeldung: Der Typinitialisierer für 'Oracle.DataAccess.Types.OracleString' hat eine Ausnahme ausgelöst.

Fehlerdetails: System.TypeInitializationException: Der Typinitialisierer für 'Oracle.DataAccess.Types.OracleString' hat eine Ausnahme ausgelöst. ---> Oracle.DataAccess.Client.OracleException Der Anbieter ist nicht kompatibel mit der Version des Oracle-Clients bei Oracle.DataAccess.Client.OracleInit.Initialize() --- Ende des inneren Ausnahme-Stacktrace ---

Server-Stack-Trace: at System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject(ParseRecord pr) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseMember(ParseRecord pr) at System.Runtime.Serialization.Formatters.Binary._ BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record) at System.Runtime.Serialization.Formatters.Binary. _BinaryParser.Run() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage) at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

Die Ausnahme wird bei [0] erneut ausgelöst: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X