2010-01-26 2 views
5

Ho seguito le istruzioni qui: http://splinter.com.au/blog/?p=156 nel tentativo di utilizzare una versione più recente di ODP.NET senza installare il client Oracle 11g. Ho seguito tutto, finora, tranne per il riavvio di IIS.Oracle oci.dll nella directory bin ASP.NET non può essere eliminato/non funziona

Tuttavia, questo ha causato alcuni problemi e sono davvero curioso di sapere perché. Se provo a utilizzare ODP.NET, mi viene in mente un'eccezione vuota generata quando la connessione Oracle tenta di connettersi (ConnectExample.Open() per esempio).

Ma la cosa più curiosa: non riesco a cancellare oci.dll. Dice che è in uso. Cosa potrebbe usare questa dll? Cosa fa esattamente ASP.NET con una dll nativa quando si trova nella directory Bin? Ho pensato che forse questo è qualcosa che coinvolge il oci.dll, ma se uso la DLL in modo simile in un'applicazione desktop WinForm allora oci.dll non viene bloccato, e posso cancellarlo liberamente.

Inoltre, dopo aver provato a usarlo, il normale System.Data.OracleClient ha smesso di funzionare. Ora genera un'eccezione che OCIEnvCreate restituisce con un -1.

Proverò a riavviare IIS e spero che risolverà questo problema, ma mi piacerebbe sapere cosa sta succedendo qui (e se può essere risolto senza riavviare IIS). Qualcuno ha un'idea?

Edit: Ho provato a riavviare IIS e che non risolvere nulla

Edit # 2: Non credo che ho formulato questa domanda molto bene, ma che era a causa del mio assumendo riavvio di IIS avrebbe funzionato. Ora ho solo bisogno di sapere perché non funziona. In Google su problemi simili ho riscontrato solo 2 post sul forum che mi hanno riferito il mio problema esatto: Oracle ODP.NET restituisce un'eccezione vuota durante il tentativo di connessione. Ecco i link a quelle:

http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296

http://forums.oracle.com/forums/thread.jspa?threadID=549864

Il legame coreano di cui sopra è il più interessante. Hanno un'installazione completa che mi fa sospettare che il mio problema non riguardi i file o i file mancanti. Mi chiedo cosa intendano per "server di produzione che generano eccezioni vuote se viene effettuata una chiamata alla DLL OCI prima di poter stabilire l'ODP"?

Modifica/Aggiornamento n. 3: abbiamo un server intranet qui per il nostro dipartimento che sono riuscito a testare oggi. Ho aggiunto la DLL richiesta alla cartella Bin e tutto ha funzionato senza la necessità di riavviare IIS. Io non chiedo. Proverò altri test su questo server per vedere se riesco a replicare il problema

Edit # 4 (l'odissea continua): Ho determinato che oraocci11.dll (l'interfaccia di chiamata C++ DLL) è necessario inizialmente da ASP. NET (o la libreria ODP.NET) per trovare anche le dll del client 11g, dopo che oraocci11.dll sembra non essere mai più usato e può essere cancellato. Non so cosa significhi per il mio problema, ma visto che aggiunge alla base di conoscenze ho pensato di menzionarlo

Modifica # 5: Ho aggiunto mfc71.dll e msvcr71.dll, 2 file di sistema Windows che si occupano di C/MFC, nella directory Bin come ho scoperto sono necessari da ODP.NET (o almeno, necessari per il client). Questo, per lo meno, ha reso le cose rimaste sul vecchio familiare errore "Cliente non compatibile". Ho rimosso quelle 2 DLL e abbastanza sicuro è tornato agli stessi errori sopra riportati. Aggiungerli non ha fatto sparire quegli errori, comunque, quindi dovrò resettare di nuovo IIS.

+0

ASP.NET caricherà la DLL quando è PInvoked da qualche parte, la DLL rimarrà caricata finché il processo ASP.NET non verrà riciclato/riavviato. –

risposta

1

Per quanto riguarda le DLL, è necessario arrestare IIS, eliminarli, quindi avviare IIS. Questo perché sono DLL native, non C# dll. La funzione "copia shadow" di C# non si applica alle DLL native, motivo per cui sono bloccate.

Per quanto riguarda Oracle, ti ho inviato via email alcune cose da provare ... in realtà dovremmo aggiornare questa pagina SO quando trovi una soluzione.

+0

Grazie, proverò a provare quei file. Sfortunatamente non ho alcun controllo diretto sul server qui, quindi è una questione di richiedere queste cose da fare. E anche allora, i processi possono essere fermati solo dopo le 17.30. Oh, qualche idea sul perché l'API MS Oracle ha smesso di funzionare? – Bob

+0

Queste oracle api sono sempre un po 'suscettibili che ho trovato ... è difficile da dire. – Chris

2

Invece di (o oltre) interrompere IIS, interrompere il servizio di pubblicazione sul Web utilizzando services.msc e quindi apportare le modifiche.

Abbiamo rilevato che per una DLL di controllo grafico utilizzata da un'applicazione asp.net, l'arresto di IIS non era sufficiente in quanto non era possibile eliminare il file (o incollarlo, ecc.). Ma una volta che il servizio di pubblicazione sul Web è stato arrestato, potrebbe essere cancellato o sovrascritto ...

+0

Pensavo che "il servizio di pubblicazione sul Web" fosse solo un sinonimo di IIS? – Chris

+0

Forse hai ragione ... Sono certo che ho dovuto interrompere il servizio di pubblicazione WWW quando l'arresto di IIS non consentiva il cambio di file ... vale la pena confermarlo però a mio vantaggio – davidsleeps

+0

ha posto la domanda su SU http://serverfault.com/questions/107053/is-stopping-iis-the-same-as-stopping-the-world-wide-web-publishing-service – davidsleeps

0

Se IIS non è il processo che blocca il file e sei davvero bloccato, Unlocker può aiutarti a vedere cosa blocca effettivamente il file, oltre a rilasciare tali blocchi ed eliminare il file con forza.

garantita here

2

Una tipica esperienza di Oracle.

Ho avuto lo stesso problema. Gli sbloccatori non funzionano. Ho provato diversi - tutti riportano che il file non è bloccato, ma poi segnalano che non possono eliminarlo.

L'arresto di IIS e della maggior parte dei servizi Windows non di base non funziona.

La soluzione è rinominare il file, riavviare, quindi cancellarlo. Per qualche ragione, Windows ti permette di rinominare un file bloccato e mantenerlo bloccato, ma al riavvio il tentativo di bloccare "oci.dll" fallisce perché non esiste più con quel nome.

0

ci sono 3 cose che so di che vi permetterà di eliminare questo e altri file che fanno parte della Oracle Data Client Access:

1.) Arrestare i pool di applicazioni all'interno di IIS.

2.) Chiudere Visual Studio.

3.) Riavviare la macchina.