Я создал сборку .NET в VS2010 для использования веб-приложением Vendor в Classic ASP.
- Сборка скомпилирована для .NET 3.5 (на компьютере DEV)
- У меня есть локальный компьютер IIS Dev, работающий под управлением Windows XP Pro с IIS 5.1
- Я установил сборку на «Сделать Com Visible»
- Сборка установлена на «Регистрация для COM»Interop "
- На компьютере разработчика я регистрирую dll, используя regasm mydll.dll / codebase
- На компьютере разработчика я предоставил учетным записям пользователей IUSR и IWAM доступ на чтение к реестру
HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones
То, что происходит, - это то, что сборка используется во время проверки входа в систему для поиска пользовательских типов, которые определяют макет страниц на основе их типа.Asp отлично работает в первый раз после входа в систему и возвращает тип без ошибок.Но если я выйду из системы или закрою страницу и снова войду в систему, ASP выдаст ошибку в моем com-объекте Object Reference, а не в экземпляре объекта.Почти как GC не поднимает объект после завершения регистрации.Объект не установлен как глобальный объект и используется только при проверке страницы входа в систему.Я пытался утилизировать, а не удалять на классической странице ASP, и получаю те же результаты.
Я в растерянности относительно того, что мне нужно сделать, чтобы решить эту проблему.Я провел последние 3 дня, читая примеры и темы по этому вопросу, но я не сталкивался ни с кем другим с такой же проблемой.Буду очень признателен за любые идеи, помощь или что-то еще.
Это главная сборка
namespace rd_custom
{
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual), EventTrackingEnabled]
public class rd_Custom
{
private rd_Logger rdLog;
private XmlDocument DADoc;
public String getRequesterType(String reqId, String dbProf)
{
//"Logic is Here to do user Lookups"
rd_sqlCon rdCon = new rd_sqlCon();
rdCon.rdLog = rdLog; // This is Disposed and Set to null later as well
rdCon.LoadSqlConfig(dbProf, "requester_type");
String[] parms = new String[1];
parms[0] = "requester_id|" + reqId;
DataTable dt = rdCon.builDataTable(parms);
rdCon.Dispose(); //*Answer
rdCon = null; //Previously was setting to null
return strRequesterType;
}
}
}
Это классический ASP, ссылающийся на COM
Dim ls_requester_type
Dim rdCustomObj
Set rdCustomObj = Server.CreateObject("rd_custom.rd_custom")
*Err*ls_requester_type = rdCustomObj.getRequesterType(CStr(l_l_requester_id), CStr(l_s_db_profile))*
If ls_requester_type <> "ERROR" Then
Session("RequesterType") = ls_requester_type
End If
Set rdCustomObj = nothing