Installieren von ODP.net auf dem Server zum Auflösen von Oracle.DataAccess.Client.OracleException: Der Provider ist nicht mit der Version von Oracle Client kompatibel

7

Ich habe eine Testumgebung für einen Service, den meine Site verwendet, und eine Produktionsumgebung. In meiner Testumgebung habe ich ODP.net auf dem Server installiert. Dieser Dienst, der Oracle verwendet, scheint bis jetzt ziemlich glatt zu laufen. Ich habe anscheinend keinen Oracle Client, der auf diesem Server läuft. Auf der anderen Seite habe ich einen Server, der einen Oracle-Client hat, aber ODP.net scheint nicht installiert zu sein (ich bin dabei, die doppelte Überprüfung durchzuführen, aber das ist die Situation ab dieser SO-Frage). . Auf dem Produktionsserver bekomme ich diese Ausnahme:

%Vor%

In beiden Servern habe ich die Oracle.DataAccess-DLL in den bin- und lib-Ordnern (glaube nicht, dass ich sie im lib-Ordner brauche, aber warum das Boot rockt ... Ich bin mir sicher, dass du dir eine gute Idee ausdenken kannst Grund, aber nicht gerade jetzt !!!). Meine Frage ist, muss ich ODP.net auf dem Produktionsserver installieren? Hat das irgendwelche Probleme gelöst, auf die Sie gestoßen sind? Ich habe einige SO Post gesehen, die sagen, dass dies ein ähnliches Problem für sie gelöst hat. Könnten Sie eine Vorgehensweise empfehlen? Danke!

    
SoftwareSavant 29.11.2011, 16:15
quelle

5 Antworten

12

Es gibt viele kleine Unterversionen des Oracle-Clients, und was wahrscheinlich passiert ist, dass die Oracle-Clients, die auf dem Rechner mit dem Fehler installiert sind, nicht genau die gleiche Version sind, aus der die Oracle.DataAccess.dll -Datei stammt.

Am besten stellen Sie sicher, dass Sie genau das gleiche Installationspaket auf jedem Dev-Rechner und Server verwenden. Dies wird jede Fehlübereinstimmung vermeiden.

Als Alternative habe ich in der Vergangenheit versucht, dies zu lösen (und es ist vielleicht nicht das "beste", aber normalerweise funktioniert es für mich), auch zu kopieren die Datei OraOps11.dll zu Ihrem \bin -Verzeichnis zusammen mit der Oracle.DataAccess.dll -Datei.

Erhalte die Datei von der gleichen oracle-Installation auf demselben Computer, auf dem du Oracle.DataAccess.dll hast. Es sollte sich in einem Ordner befinden, der wie folgt benannt ist, je nachdem, wo Sie Oracle installiert haben und welche Version:

  

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

    
CodingWithSpike 29.11.2011, 16:32
quelle
5

Das funktionierte für mich, sobald ich sie ausgeführt habe:

%Vor%

Viel Glück

    
Elie 31.10.2012 14:14
quelle
2

Ich hatte genau das gleiche Problem, ich habe versucht, so viel wie möglich zu kopieren, aber ohne Glück.

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

Stellen Sie nach der Installation sicher:

  • PATH wurde mit den Oracle-DLLs location: \ product \ 12.1.0 \ client_1 \ bin und \ product \ 12.1.0 \ client_1
  • aktualisiert
  • Starten Sie den Server neu.
  • Aktivieren Sie 32bit für den App Pool in IIS.
Abdallah 19.07.2014 17:38
quelle
1

Ich laufe mit demselben Problem in einem Windows 2012 Server, den ich Oracle 10.2.0.3 installiert hatte (die unterstützte Version von Oracle 10.2, die mit 64 Bit kompatibel ist) und stellte eine Website mit 10.2.0.1 Oracle Client bereit.

Ich habe versucht, alle Lösungen in diesem Post, aber der, der von mir arbeitete, war der letzte Punkt von Abdallah Antwort:

"Aktivieren Sie 32bit für den App Pool in IIS"

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 es mich dazu brachte, geblendet zu werden, um das Versions-Problem zu lösen, aber das eigentliche Problem war, dass IIS nicht 32-Bit-App ausführen konnte.

Hoffe es hilft

    
Fernando 16.03.2015 10:26
quelle
0

Danke ... das hat mir geholfen, Zeit für die Konvertierung von 32 Bit auf 64 Bit unserer ASP.Net Anwendung zu sparen ...

In Details: APP-Server sucht nach Client-Bibliotheken, sogar wir verwenden Remoting-Komponente, um eine Verbindung zu ORACLE db ... mit ORACLE-Client 64 Bit ..

Die Exception, die ich bekam, wurde behoben, nachdem diese 5 DLLs in meinen app / bin-Ordner kopiert wurden

  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. --- & gt; Oracle.DataAccess.Client.OracleException Der Provider ist nicht kompatibel mit der Version des Oracle-Clients bei Oracle.DataAccess.Client.OracleInit.Initialize ()      --- Ende der inneren Ausnahmestapelspur ---

     

Server-Stack-Ablaufverfolgung:      bei System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject (RuntimeType-Typ)      bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject (ParseRecord pr)      bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseMember (ParseRecord pr)      bei System.Runtime.Serialization.Formatters.Binary ._ BinaryParser.ReadObjectWithMapTyped (BinaryObjectWithMapTyped-Datensatz)      unter System.Runtime.Serialization.Formatters.Binary. _BinaryParser.Run ()      System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (HeaderHandler-Handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)      bei System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream serializationStream, HeaderHandler-Handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)      bei System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (Stream SerializationStream, HeaderHandler-Handler, Boolean fCheck, IMethodCallMessage-MethodeCallMessage)      bei System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage (IMessage msg)

     

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

    
Kishore 18.07.2012 22:20
quelle

Tags und Links