2011-06-29 5 views
10

Sto lavorando su un sito Web ASP.NET che chiama un database DB2. Ho installato Visual Studio su un server Windows 2008 in cui verrà ospitato il sito. Quando eseguo il debug del sito in Visual Studio, utilizzando il server Web integrato, posso connettermi al database e il sito funziona correttamente. Quando imposto il sito su IIS7, sullo stesso server, non riesco ad accedere al sito o al database a causa del seguente errore.ASP.NET - IIS7 - IBM DB2 Edizione

Ecco i dettagli tecnici:

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 

Non capisco come il sito può funzionare bene utilizzando il server Web Studio visiva e non lavorare in IIS. Non so se si tratta di un problema di IIS o di un problema con la versione di IMB.Data.DB2.dll che sto utilizzando. Se qualcuno ha una soluzione o qualche idea, sarebbe molto apprezzato.

Grazie.

risposta

0

Sembra che la versione del framework .Net sia errata nel tuo AppDomain. Nelle impostazioni di AppDomain, assicurarsi che la versione di framework .Net selezionata corrisponda alla versione dell'assembly IBM.Data.DB2.

+0

Grazie per la risposta. Ho provato questo e non ha funzionato. Sono stato in grado di capire il problema – user718300

+0

Cosa hai fatto per correggere il problema? – camainc

16

Per rendere questo lavoro ho dovuto andare in Gestione IIS, fare clic sul nodo del pool di applicazioni, fare clic sul pool di applicazioni per il sito, quindi fare clic su Impostazioni avanzate sul lato destro dello schermo. Quindi ho modificato Abilita applicazioni a 32 bit su true.

Questo problema risolve il problema e il sito funziona correttamente.

+1

Corregge l'errore ma forza l'esecuzione dell'applicazione a 32 bit. La vera soluzione è eliminare il file IBM.Data.DB2.dll a 32 bit dalla cartella bin in modo che IIS possa trovare la versione corretta (64 bit) nel GAC. –

+0

@MarcSelis Grazie mille, il tuo commento ha aiutato :) –

3

Per qualche strano motivo Visual Studio 2012 (e versioni successive) copia sempre la versione a 32 bit di IBM.Data.DB2.dll nella cartella bin, anche se non è necessaria poiché tale DLL è registrata GAC ​​quando DB2 Connect è installato.

La soluzione più semplice è aggiungere uno script post-generazione per eliminare quella DLL dalla cartella bin dopo ogni generazione. In questo modo IIS sarà in grado di trovare la versione corretta (se ha bisogno della versione a 32 o 64 bit dipende dalle impostazioni di AppPool) nel GAC.

+0

Grazie per questo, ha risolto il mio problema. Vedrò se riesco a impedire che la copia iniziale accada. A proposito, questo accade anche con Visual Studio 2015. – DevOhrion

+0

Ho copiato la DLL nel cestino. Quando l'ho cancellato, ho smesso di ricevere questo errore. –