2011-06-29 13 views
10

Estoy trabajando en un sitio web ASP.NET que llama a una base de datos DB2. Tengo instalado Visual Studio en un servidor de Windows 2008 donde se alojará el sitio. Cuando depuro el sitio en Visual Studio, usando el servidor web integrado, puedo conectarme a la base de datos y el sitio funciona bien. Cuando configuro el sitio en IIS7, en el mismo servidor, no puedo acceder al sitio o la base de datos debido al siguiente error.ASP.NET - IIS7 - IBM DB2 Issue

Éstos son los detalles técnicos:

Windows 2008 Server 
IIS 7 
Visual Studio 2010 Premium 
DB2 v9.5.301.436 

Could not load file or assembly 'IBM.Data.DB2' or one of its dependencies. An attempt was made to load a program with an incorrect format. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.BadImageFormatException: Could not load file or assembly 'IBM.Data.DB2' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Assembly Load Trace: The following information can be helpful to determine why the assembly 'IBM.Data.DB2' could not be loaded. 

WRN: Assembly binding logging is turned OFF. 
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. 
Note: There is some performance penalty associated with assembly bind failure logging. 
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog]. 

Stack Trace: 

[BadImageFormatException: Could not load file or assembly 'IBM.Data.DB2' or one of its dependencies. An attempt was made to load a program with an incorrect format.] 
    System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 
    System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567 
    System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192 
    System.Reflection.Assembly.Load(String assemblyString) +35 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +118 

[ConfigurationErrorsException: Could not load file or assembly 'IBM.Data.DB2' or one of its dependencies. An attempt was made to load a program with an incorrect format.] 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11424435 
    System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484 
    System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +127 
    System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334 
    System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280 
    System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1167 

[HttpException (0x80004005): Could not load file or assembly 'IBM.Data.DB2' or one of its dependencies. An attempt was made to load a program with an incorrect format.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11556592 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4813333 

No entiendo cómo el sitio puede funcionar muy bien usar el servidor web Estudio Visual y no trabajar en IIS. No sé si es un problema de IIS o un problema con la versión de IMB.Data.DB2.dll que estoy usando. Si alguien tiene una solución o alguna idea, sería muy apreciada.

Gracias.

Respuesta

0

Parece que la versión de .Net framework está mal en su AppDomain. En la configuración de AppDomain, asegúrese de que la versión de .Net framework que está seleccionada coincida con la versión de su ensamblado IBM.Data.DB2.

+0

Gracias por la respuesta. Intenté esto y no funcionó. Pude averiguar el problema – user718300

+0

¿Qué hiciste para corregir el problema? – camainc

16

Para que esto funcione, tuve que ir al Administrador de IIS, hacer clic en el nodo del grupo de aplicaciones, hacer clic en el grupo de aplicaciones para el sitio y luego hacer clic en configuración avanzada en el lado derecho de la pantalla. Luego cambié las aplicaciones Habilitar 32 bits a verdadero.

Esto solucionó mi problema y el sitio funciona correctamente.

+1

Esto corrige el error pero obliga a su aplicación a ejecutarse en 32 bits. La solución real es eliminar el IBM.Data.DB2.dll de 32 bits de la carpeta bin para que IIS pueda encontrar la versión correcta (64 bits) en el GAC. –

+0

@MarcSelis Muchas gracias, su comentario ayudó :) –

3

Por alguna extraña razón, Visual Studio 2012 (y posterior) siempre copia la versión de 32 bits de IBM.Data.DB2.dll en su carpeta bin, aunque eso no es necesario porque esa DLL está registrada como GAC cuando DB2 Connect esta instalado.

La solución más simple es agregar una secuencia de comandos posterior a la creación para eliminar esa DLL de su carpeta bin después de cada compilación. De esta forma, IIS podrá encontrar la versión correcta (si necesita la versión de 32 bits o de 64 bits depende de la configuración de su AppPool) en el GAC.

+0

Gracias por esto, solucionó mi problema. Veré si puedo evitar que ocurra la copia inicial. Por cierto, esto también ocurre con Visual Studio 2015. – DevOhrion

+0

Copié la DLL en el contenedor. Cuando lo borré dejé de obtener este error. –

Cuestiones relacionadas