我有一个IHttpHandler,我相信它可以从重用中受益,因为它的设置成本很高,并且是线程安全的。但是将为每个请求创建一个新的处理程序。我的处理程序没有被重用。

以下是我的简单测试案例,没有昂贵的设置。这个简单的例子说明了我的问题:

public class MyRequestHandler : IHttpHandler
{
    int nRequestsProcessed = 0;

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        nRequestsProcessed += 1;
        Debug.WriteLine("Requests processed by this handler: " + nRequestsProcessed);
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
    }
}

Requests processed by this handler: 1
Requests processed by this handler: 1
Requests processed by this handler: 1
Requests processed by this handler: 1... at least 100 times. I never see > 1.

我是否误解了IsReusable的工作原理?还有其他可以阻止重复使用的东西吗?如果有任何区别,将从Silverlight应用程序中调用我的处理程序。

最佳答案

IsReusable不是保证。

只需重构您的处理程序,然后将所有交叉请求状态放入另一个类即可。无论如何,以最佳实践的方式在Web应用程序中清楚地区分交叉请求状态,因为它很危险。

关于c# - IHttpHandler IsReusable,但是没有被重新使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12239711/

10-11 13:02