2013-07-02 16 views
5

Wir verwenden die Oracle.DataAccess.dll Assemblyversion 2.102.2.20 (32 Bit).So beheben Sie "Der Anbieter ist nicht kompatibel mit der Version von Oracle-Client"?

ich unsere Web-API-Anwendung auf IIS eingesetzt und versuchte und Abbau eine Verbindung openning:

private static void CheckConnectionUsingOracleClient(string connection) 
     { 
      var logger = DiContainer.Resolve<ILogger>(); 

      try 
      { 
       logger.LogInfo("Trying to connect to " + connection); 
       // check whether you can connect to the shop using Oracle.DataAccess 
       using (var cnn = new Oracle.DataAccess.Client.OracleConnection(connection)) 
       { 
        cnn.Open(); 
        cnn.Close(); 
       } 

       logger.LogInfo("Succeeded to connect to " + connection); 
      } 
      catch (System.Exception ex) 
      { 
       logger.LogError("Failed to connect to " + connection, ex); 
      } 
     } 

auf meinem lokalen Rechner wirft sie es ist in Ordnung, aber auf diesem Server eine Ausnahme, wenn die die OracleConnection zu initialisieren versuchen:

Der Typinitialisierer für 'Oracle.DataAccess.Client.OracleConnection' hat eine Ausnahme ausgelöst. ---> Oracle.DataAccess.Client.OracleException: Der Anbieter ist nicht kompatibel mit der Version von Oracle-Client

I Oracle-Client 11.2 (32 Bit) auf dem Server installiert haben, und ich kann sehen, dass in Der GAC (c: \ windows \ assembly) Die Oracle.DataAccess-Assembly wird in einer 32-Bit-Prozessorarchitektur installiert. Es funktioniert gut auf einem unserer Server, aber nicht in diesem.

In IIS habe ich auch "32-Bit-Anwendung aktivieren" im Anwendungspool festgelegt.

Wie kann es behoben werden? Ich habe mehr als 10 Stunden damit verbracht, so weit versucht, verschiedene Dinge :(

Ich würde ideal Oracle.DataAccess.dll in der Lage sein möge, ohne die Notwendigkeit zu verwenden, um einen Oracle-Client auf dem Server zu installieren.

+0

Möglicherweise Probleme mit dem Fahrer des Verbinders. Versuchen Sie, andere Versionen zu entfernen/zu installieren. – PiLHA

+0

Mögliches Duplikat von http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client – cremor

Antwort

3

Oracle .DataProvider Version 2.102.2.20 decripted

2: NET-Version (1 kann für.NET 1 sein - 1,1, 2 für 2 - 3,5 und 4 für 4 - 4,5)

102: Oracle Version : Oracle 10.2

2.20: Oracle Datenzugriff Version

Sie

  1. .Net Version (sollte nicht höher sein als Ihre .NET-Compiler)

  2. Oracle-Client-Version (nicht überschreiten sollte überprüfen sollten, Oracle Client-Version)

  3. Sowohl Oracle-Client und Oracle.DataProvider sind 64-Bit oder Oracle.DataProvider ist 32 Bit und Oracle-Client ist entweder 32 bi t oder unterstützt Legacy-32-Bit-Modus

+0

Ich arbeite mit .NET 4.5. Oracle Client Version 11.2 ist auf einem anderen PC installiert und funktioniert einwandfrei. Sie sind alle 32 Bits. –

0

Nach der Installation sicher:

  • PATH mit Oracle dlls Standort aktualisiert wird: \ product \ 12.1.0 \ client_1 \ ist und \ product \ 12.1.0 \ client_1
  • Starten Sie den Server neu.
  • Aktivieren Sie 32bit für den App Pool in IIS.
4

können Sie Oracle installieren.ManagedDataAccess mit Package Manager Console nuget

Pm> Install-Package Oracle.ManagedDataAccess 

ODP.NET, Managed-Treiber ist ein 100% nativen .NET-Code-Treiber. Für die Verbindung zur Oracle-Datenbank muss keine zusätzliche Oracle-Client-Software installiert werden.

-Update-Code

using Oracle.ManagedDataAccess.Client; 
private static void CheckConnectionUsingOracleClient(string connection) 
     { 
      var logger = DiContainer.Resolve<ILogger>(); 

      try 
      { 
       logger.LogInfo("Trying to connect to " + connection); 
       // check whether you can connect to the shop using Oracle.DataAccess 
       using (var cnn = new OracleConnection(connection)) 
       { 
        cnn.Open(); 
        cnn.Close(); 
       } 

       logger.LogInfo("Succeeded to connect to " + connection); 
      } 
      catch (System.Exception ex) 
      { 
       logger.LogError("Failed to connect to " + connection, ex); 
      } 
     }