Попытка определить проблему, которая наиболее вероятна из-за того, что наше веб-приложение пытается загрузить 32-разрядную версию OracleAccess.dll, когда IIS работает как 64-разрядная (она выглядит как 32-разрядная и 64-разрядная).версии драйверов Oracle могут быть установлены параллельно).
У меня есть два сайта на сервере, один для производства и один для тестирования.У производственного кода есть код, который был развернут сотрудником, которого больше нет с нами.Этот сайт работает.Другой сайт, который мы только что развернули;он был скомпилирован для Any CPU
, и мы получаем ошибки при загрузке драйверов Oracle.
Если я просматриваю рабочий процесс IIS для рабочего сайта в проводнике процессов SysInternal, выделяю рабочий процесс IIS и просматриваю загруженные библиотеки DLL.в представлении нижней панели я вижу некоторые странные данные.
Информация для рабочего процесса:
Process Version User Name PID Image Type
w3wp.exe 6.0.3790.3959 NT AUTHORITY\NETWORK SERVICE 3320 64-bit
Но в списке загруженных библиотек DLL некоторые перечислены как 64-разрядныеизображения, а некоторые перечислены как 32-битные?(AFAIK) невозможно загрузить 32-разрядные библиотеки DLL в 64-разрядное пространство процесса, поэтому, возможно, я не понимаю отчет, который я вижу.
Подмножество информации о дескрипторе DLL:
Name Image Type Description Company Name Version
aspnet_filter.dll 64-bit Microsoft ASP.NET ISAPI Filter DLL Microsoft Corporation 4.0.30319.1
admwprox.dll 64-bit IIS Admin Com API Proxy dll Microsoft Corporation 6.0.3790.3959
adsldp.dll 64-bit ADs LDAP Provider DLL Microsoft Corporation 5.2.3790.3959
adsldpc.dll 64-bit ADs LDAP Provider C DLL Microsoft Corporation 5.2.3790.3959
advapi32.dll 64-bit Advanced Windows 32 Base API Microsoft Corporation 5.2.3790.4555
aspnet_filter.dll 64-bit Microsoft ASP.NET ISAPI Filter DLL Microsoft Corporation 4.0.30319.1
aspnet_isapi.dll 64-bit Microsoft ASP.NET ISAPI Shim DLL Microsoft Corporation 2.0.50727.3053
comctl32.dll 64-bit Common Controls Library Microsoft Corporation 5.82.3790.4770
comctl32.dll 64-bit User Experience Controls Library Microsoft Corporation 6.0.3790.4770
comres.dll 64-bit COM+ Resources Microsoft Corporation 2001.12.4720.3959
(Next few are our DLLs)
CSA.Database.DLL 32-bit CSA.Database TE 1.7.8221.0
CSA.Database.DLL 32-bit CSA.Database TE 1.7.8221.0
CSA.Loggers.DLL 32-bit CSA.Loggers TE 1.7.8221.0
CSA.Loggers.DLL 32-bit CSA.Loggers TE 1.7.8221.0
CSA.Network.DLL 32-bit CSA.Network TE 1.7.8221.0
CSA.Network.DLL 32-bit CSA.Network TE 1.7.8221.0
Enterprise.Data.DLL 32-bit Enterprise.Data TE 2.35.3.0
Enterprise.Data.DLL 32-bit Enterprise.Data TE 2.35.3.0
Enterprise.Diagnostics.DLL 32-bit Enterprise.Diagnostics TE 2.35.3.0
Enterprise.Diagnostics.DLL 32-bit Enterprise.Diagnostics TE 2.35.3.0
(More Microsoft DLLs... some 32-bit, some 64-bit??)
FederatedLibrary.DLL 32-bit FederatedLibrary Microsoft 1.0.0.0
FederatedLibrary.DLL 32-bit FederatedLibrary Microsoft 1.0.0.0
gdi32.dll 64-bit GDI Client DLL Microsoft Corporation 5.2.3790.4396
gzip.dll 64-bit GZIP Compressn DLL Microsoft Corporation 6.0.3790.1830
Microsoft.Practices.EnterpriseLibrary.Common.DLL 32-bit Enterprise Library Shared Library Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.Common.DLL 32-bit Enterprise Library Shared Library Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.DLL 32-bit Enterprise Library Exception Handling Application Block Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.DLL 32-bit Enterprise Library Exception Handling Application Block Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.Logging.DLL 32-bit Enterprise Library Logging Application Block Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.Logging.DLL 32-bit Enterprise Library Logging Application Block Microsoft Corporation 4.1.0.0
(And finally, the Oracle drivers that seem to be causing issue... 64-bit)
oracle.dataaccess.dll 64-bit Oracle.DataAccess.dll Oracle Corporation 2.112.1.0
oracle.dataaccess.dll 64-bit Oracle.DataAccess.dll Oracle Corporation 2.112.1.0
Я использовал corflags
, чтобы проверить, были ли рабочие, производственные библиотеки DLL скомпилированы явно для 32-разрядных ... Если я понимаю вывод, это не так.
C:\SingleSignOn\bin>corflags CSA.Network.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
Первый шаг в понимании того, почему наше недавно скомпилированное развертывание не работает, состоит в том, чтобы понять, почему работает текущее.Может кто-нибудь объяснить мне, что я вижу?
Что мне нужно знать:
- Работает ли IIS как 64-битный процесс и будет ли загружать
Any CPU
DLLкак 64-битный? - Если да, почему эти DLL-библиотеки перечислены в Process Explorer как 32-битные образы?
- Возможно ли, что IIS загружает 32-битные DLL в 64-битныебитное пространство процесса?
- Если IIS является 64-битным процессом, и мы загружаем веб-сайт, скомпилированный как
Any CPU
, будет ли он работать 32-битным, если какая-либо из библиотек DLL, от которых он зависит, является 32-битной DLL (например, он был скомпилирован с 32-битной версией драйверов Oracle?)
Заранее спасибо ...