2 febbraio 2010 17:55
Oracle Client, Visual Studio 2008, IIS 7.5, Windows 7 x64: una bella lotta
Dopo che ieri avevo trovato il modo di imbrogliare l’installer del client Oracle 11gR1 a 64bit (che ufficialmente non supporta Windows 7), oggi mi sono dovuto scontrare con un problema più rognoso: il client si era installato, riuscivo a fare una connessione al server Oracle, ma il mio progetto ASPX (con il suo DAL e un mio OracleHelper) dentro VS2008 non funzionavano.
Ricompilando infatti il DAL (Data Access Layer) con la Oracle.DataAccess.dll a 64 bit e facendo girare il sito sull’IIS 7.5 locale (che gira a 64bit) tutto funzionava, ma se facevo ricompilare il sito aspx mi beccavo una bella:
Could not load file or assembly 'Oracle.DataAccess, Version=2.111.6.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.
In pratica la dll a 64bit a VS2008 (che ricordo è solo a 32bit) non andava giù…Ricompilando il DAL con una vecchia DLL (una 10.2) a 32 bit, il progetto web si ricompilava ma l’esecuzione nel browser dava un
The provider is not compatible with the version of Oracle client
Per farla breve ed evitarvi tutti i passaggi intermedi infruttosi (smanettare nella GAC, commentare l’assembly nel machine.config, sperare che il catamarano di Oracle si incagli sugli scogli, ecc) ecco come ho risolto:
- Disinstallare tutto e partire puliti :-)
- Installare il client 11gR1 a 32 bit (win32_11gR1_client, sempre col trucco del file refhost.xml); provando una connessione con un fle .udl vi dirà che non trova il provider… fa niente
- Installare il cliente 11gR1 a 64bit (win64_11gR1_client); ora l’udl si connette
- Ricompilare il vostro Dal o Helper con la Oracle.DataAccess a 32 bit (io ho usato la 1.111.6.0)
- Ricompilare il vostro progetto web con queste dll nella Bin; dovrebbe ricompilare bene e il sito girare nel webserver di VS (Cassini)
- Se volete che giri anche nell’IIS 7.5 (perchè magari volete testare bene authorization e authentication) allora dovete andare nelle Advanced Settings dell’Application Pool associato al vostro website e dire Enable 32-bit Application = True
Magari per qualcuno era logico, ma forse a qualcun altro risparmia qualche ora e qualche santo…