经典ASP工作所使用的.NET程序集只会抛出一次ObjectRefNotSetException

时间:2011-12-15 15:14:09

标签: c# .net com asp-classic exception-handling

我已经在VS2010中为Classic ASP中的供应商Web应用程序创建了一个.NET程序集。

  • 为.NET 3.5(在DEV计算机上)编译程序集
  • 我有一台运行带有IIS 5.1的Windows XP专业版的本地IIS开发者
  • 我已将程序集设置为“Make Com Visible”
  • Build设置为“Register for COM Interop”
  • 在开发机器上,我使用regasm mydll.dll / codebase
  • 注册dll
  • 在开发机器上,我授予了IUSR和IWAM用户帐户对注册管理机构的HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones
  • 的读取权限

正在发生的事情是在登录验证期间使用程序集来查找根据其类型定义页面布局的用户类型。登录后第一次asp工作正常,返回没有错误的类型。但是,如果我注销或关闭页面并重新登录,ASP会在我的com对象中抛出一个错误,该对象没有设置为对象的实例。几乎就像GC在完成注册后没有拿起对象。 Object未设置为Global对象,仅用于验证Login页面。我尝试过处理而不是在经典的ASP页面中处理并得到相同的结果。

我对解决此问题需要采取的措施感到茫然。我花了最近3天阅读有关该主题的示例和主题,但我没有遇到过同样问题的其他人。任何想法,帮助或尝试的事情都将非常感激。

这是The Assembly Main

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;
        }
    }
}

这是引用COM的经典ASP

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    

0 个答案:

没有答案