2017-07-09 3 views
6

Je dois obtenir une application héritée qui utilise unmanaged ODP.NET travaillant sur une machine 64-bit.Comment puis-je obtenir ODP.NET non géré (64 bits) fonctionnant dans ASP.NET sur 64 bits O/S?

  1. J'ai installé 64-bitunmanaged ODP.NET
  2. J'ai vérifié que le 64-bitunmanaged ODP.NET fonctionne très bien en testant dans une application console
  3. J'ai créé une application web de test avec le même code d'accès aux données que la console de travail application et une référence à la même DLL Oracle.Data.Access dans le GAC que l'application console utilise. L'application Web est incapable de se connecter à la base de données. L'extrait de code n'est pas pertinent, car le code fonctionne et est très simple (voir point 2.).

Il échoue à conn.Open();

Exception.Message est vide.

Exception.StackTrace est pas utile:

at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, 
    OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object 
    src, String procedure, Boolean bCheck, Int32 isRecoverable) at 
    Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, 
    OracleConnection conn, IntPtr opsErrCtx, Object src) at 
    Oracle.DataAccess.Client.OracleConnection.Open() at 
    TestODPNet.ODPNetTester.Test() in 
    D:\Projects\TestODPNet\TestODPNet\ODPNetTester.cs:line 27 

L'application est en cours d'exécution sur Local IIS, non IIS Express.

Dans IIS, "Enable 32-bit applications" est défini sur false. L'application cible la plate-forme x64-bit, pas Any CPU.

Localement, j'utilise 64-bit Windows 10 et sur le serveur, j'utilise 64-bit Windows Server 2012. Je ne suis pas en mesure d'obtenir non géré ODP.NET travaillant sur l'un ou l'autre. Donc, il ne semble pas que cela a à voir avec 32-bit binaires autant que je peux dire depuis ODP.NET et les deux OS sont tous 64-bit.

Modifier: Le pool d'applications est (temporairement pour un test) en cours d'exécution en utilisant le même compte que l'application console, qui est l'administrateur de la machine.

Qu'est-ce qui me manque? Comment puis-je obtenir unmanaged ODP.NET (64-bit) travaillant dans ASP.NET sur 64-bit O/S?

Note: Cette question semble un peu semblable à d'autres questions, mais il est pas aussi loin que je peux dire

Note 2: Oui, je sais que la méthode recommandée est d'utiliser managed ODP.NET, mais je ne le font pas avoir le code source et ne peut donc pas faire ce changement.

+1

ODP.NET non géré n'est pas un fichier. C'est une collection complète de fichiers dépendants et d'entrées de config/entrées de registre. Comment avez-vous obtenu Oracle.DataAccess.dll sur la machine? Si vous n'avez pas exécuté l'installateur pour le mettre là, vous devriez. Dites-nous également quelle version vous utilisez. –

+1

Vous devriez vous concentrer sur l'obtention de l'exception pour fournir des informations car cela conduira probablement à une solution. Essayez d'attraper une exception OracleException et voyez si cela aide. –

+0

@ChristianShay Merci d'avoir répondu. J'ai installé ODP.NET à travers le programme d'installation. J'ai changé le code pour attraper une OracleException. Exception.Message est toujours vide. Exception.InnerException est toujours null. La version de la base de données est 11.2.0.4.0 - 64bit. Les versions ODP.NET sont 2.112.1.0 (AMD64) et 4.121.1.0 (AMD64) – Zesty

Répondre

0

J'ai essayé une application simple et cela fonctionne comme prévu pour moi. Ma configuration Win 8.1, IIS

Capture d'écran de DLL chargées du processus après la connexion à Oracle

enter image description here

using (OracleConnection conn = new OracleConnection(connectionString)) 
    { 
     conn.Open(); 

    } 

Sur la base de la documentation ODP.Net

fournisseur de données Oracle pour .NET, pilote Unmanaged Assemblages

Oracle.DataAccess.Client namespace contient des classes et des énumérations ODP.NET pour le fournisseur côté client.

J'ai ajouté une référence à Oracle.DataAccess.dll. C'est la SEULE référence DLL Oracle dans mon projet.

Dans ma machine la DLL était à l'emplacement suivant

\ produit \ 12.2.0 \ client_1 \ odp.net \ bin \ 4 \ Oracle.DataAccess.dll

je this la version à partir du site d'Oracle pour l'installation de ODP.Net

enter image description here

Lors de l'installation, je spécifiquement choisi

(1) ne pas changer machine.config

(2) de ne pas installer quoi que ce soit dans le GAC

Donc, les choses à essayer:

(1) Référence de l'ensemble du dossier Oracle (au lieu de GAC)

(2) Installer la dernière disponible ODP.Net

Bonne chance