Oracle Data Provider for .Net y Windows 2008 R2 x64

 

Aquí va el primer post.

Hemos estado desarrollando una aplicación ASP.Net (3.5) con Oracle 10g R2. El entorno de desarrollo es Windows XP Professional de 32 bits, con Visual Studio 2010.

Teniendo en cuenta que Microsoft ha decidido dejar el desarrollo de su propio proveedor de acceso a datos para Oracle, opté por usar ODP.Net (Oracle Data Provider for .Net) que viene incluído en Oracle Data Access Components for Windows (ODAC 11.2.0.1.2)

Una vez que terminé el desarrollo, al pasar a producción, la aplicación no funcionaba. El entorno de producción era Windows Server 2008 R2 x64 y IIS 7.5. Me salía el siguiente mensaje:

[FileNotFoundException]: Could not load file or assembly ‘Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342’ or one of its dependencies. The system cannot find the file specified.
at DAMoneyCardSys.DAUsuario..ctor()
at BLMoneyCardSys.BLUsuario..ctor() in C:\Inetpub\wwwroot\MoneyCardSys\C.Business.Entity\C.Business.Rules\BLUsuario.vb:line 8
at Login..ctor() in E:\MoneyCardSys\Login.aspx.vb:line 10
at ASP.login_aspx..ctor() in E:\MoneyCardSys\Login.aspx.vb:line 912304
at __ASP.FastObjectFactory_app_web_p9s6fbld.Create_ASP_login_aspx()
at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
[HttpException]: Exception of type ‘System.Web.HttpException’ was thrown.
at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Probé instalando lo mismo que instalé en mi máquina de desarrollo en el servidor manteniendo el mismo error.

Después de investigar casi 2 días, encontré la causa del problema y la solución.

El problema es que había instalado y compilado la aplicación usando Oracle.DataAccess 2.112.1.2 para 32 bits (incluído en ODAC 11.2.0.1.2), y al subirlo al servidor, éste buscaba el equivalente de la misma versión 2.112.1.2 para 64 bist.

Así que empecé a buscar esa versión pero no existía. Por lo tanto, empecé a buscar una versión anterior.

Primero, descargué e instalé Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (32-bit) en mi computadora de desarrollo (Windows XP SP3 x86) . Luego, en mi aplicación ASP.Net, quité las referencias a Oracle.DataAccess 2.112.1.2 y agregué las que vienen con ODAC 11.2.0.1.0, en este caso, Oracle.DataAccess 2.112.1.0. Además, me aseguré de no incluir el ensamblado como copia local en la aplicación (carpeta bin) y lo establecí como versión específica. Además, compilé la aplicación teniendo como target Any CPU.

Luego,  descargué e instalé en el servidor de producción (Windows Server 2008 R2 x64) lo siguiente: Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64) .

Luego, subí nuevamente la aplicación ASP.Net y esta vez si funcionó.

El truco: instalar en el ambiente de prueba y de producción la misma versión del Oracle Database Client, en este caso, 11.2.0.1.0, lo cual trae consigo el ensamblado Oracle.DataAccess 2.112.1.0. Además, compilar la aplicación para cualquier arquitecura (ANY CPU), no incluir una copia local de la referencia en la carpeta BIN e incluir la referencia como versión específica.

PS: La última versión de Oracle Database Client es 11.2.0.1.2, pero solo hay versión de 32 bits, así que no debe usarse sí la aplicación pasará a un servidor de 64 bits para producción.

Para más información, revisar esto y esto.

Referencias:

Oracle .NET Development Requirements

Oracle Data Access Components (ODAC) with 64-bit Development

Finally an Oracle x64 client that works on Vista – AKA Getting Map 2010 x64 running with Oracle…

Master Note for ODP.Net (Oracle Data Provider for .Net)

4 responses to this post.

  1. Posted by Milton González on 10 febrero, 2011 at 10:25

    Excelente, tenía un problema similar, y con esto lo solucioné. aunque además fue poner el appPool de la aplicación a que funcione en modo clasico y a 32 bits, pero con esto solucioné el gran problema que tenía.

    Gracias.

    Responder

  2. […] Oracle Data Provider for .Net y Windows 2008 R2 x64 […]

    Responder

  3. Posted by Omar on 3 julio, 2012 at 10:01

    Gracias por el aporte, me sirvió a la perfección. Saludos

    Responder

  4. Gracias 74188681

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: