IHttpAsyncHandler unloading
本文关键字:unloading IHttpAsyncHandler | 更新日期: 2023-09-27 17:49:31
我有一个需要从web服务调用的大型COM对象。因此,我实现了一个IHttpAsyncHandler类,希望保存对COM对象的引用。这样,请求之间的加载时间就会减少。我在Windows 2003服务器上运行IIS 6。
看起来HttpHandler程序集(?)在处理之后卸载,因为我的静态列表在后续调用中是空的。即使第二个调用非常直接,也会发生这种情况:
public class x2Handler : IHttpAsyncHandler, System.Web.SessionState.IRequiresSessionState
{
public bool IsReusable { get { return true; } }
private static List<AsynchOperation> _asynch = new List<AsynchOperation>();
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
{
AsynchOperation asynch = null;
foreach( AsynchOperation op in _asynch){
if (op.Completed){
asynch = op;
break;
}
}
if (asynch == null)
{
asynch = new AsynchOperation();
_asynch.Add(asynch);
}
asynch.Context = context;
asynch.Callback = cb;
asynch.State = extraData;
asynch.StartAsyncWork();
return asynch;
}
public void EndProcessRequest(IAsyncResult result)
{
}
public void ProcessRequest(HttpContext context)
{
throw new InvalidOperationException();
}
}
当进程被调用时_asynch为空。应用程序池似乎没有任何会导致程序集卸载的设置。
如何使静态变量在调用之间保持其值?
编辑:我不知道它是否有助于弄清楚这一点,但如果我有一个断点,它被击中,然后我删除断点,当代码再次执行(因为另一个HTTP请求)断点仍然设置。
编辑:我给类添加了一个析构函数,并在其中放置了一个断点,以确定是什么杀死了类,它是从"Appdomain Transition"调用的。
编辑:我已经尝试从IRequiresSessionState继承,然后分配一个测试值到上下文。会话和上下文。应用程序,两者在调用之间都不保留其值。那么,是否有可能在调用之间释放应用程序池?
实际问题与此无关。在调用COM对象之前,我写了一个COM对象可以访问的文本文件。然后将文本文件的名称传递给COM对象。问题是我正在将文件写入安装了HTTPHandler的当前目录。
冒险猜测ASP。Net监视目录,并且在当前处理完成后,bin文件夹中的任何更改都会导致应用程序卸载。因此,应用程序将为每次调用卸载。移动文本文件解决了这个问题