我一直在使用Ashx
和jQuery
。我读过,我说的是IHttpHandler.IsReusable
属性。
获取一个值,该值指示另一个请求是否可以使用
ihttphandler实例。
它们是什么意思“the IHttpHandler instance.
”?他们是想让每个人都能看到和使用它吗?它可以重复使用吗?(询问、饼干等?)
如果我写这个:
public class MyHttpHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Write(DateTime.Now.Ticks.ToString());
}
public bool IsReusable
{
get { return true; }
}
}
似乎每个请求都会得到自己的最新值。
最佳答案
在您的示例中,您没有管理任何状态。任何人都可以在同一个实例上调用他们想要的次数,并且他们将得到一个新的DATETIME。
但如果你这样做了呢:
private DateTime _dateTime = DateTime.Now;
public void ProcessRequest(HttpContext context)
{
context.Response.Write(_dateTime);
}
现在,每次实例化处理程序实例后,都会得到相同的响应。除非ASP.NET每次都生成一个新的。
ProcessRequest
可以指示您的处理程序类是否管理可以在单独请求之间共享的任何状态。如果它管理不可以共享的状态,那么它不太可能是外部等幂的,甚至可能不是线程安全的。使用相同的输入条件调用IsReusable
可能不会导致相同的输出,因为您的特定处理程序实现还具有一些实例级变量,这些变量在确定输出时不可以共享。(实际上,从技术上讲,您当前的实现就是一个例子)。在这些情况下,该实例可能不“可重用”,而且ASP.NET每次都需要生成一个新实例以确保可预测性。因此,对于不管理状态的情况,或者对于状态“明显”的非常简单的处理程序(如我们这里的示例),
ProcessRequest
可能看起来毫无意义。但是,如果您有一个非常复杂的处理程序—可能它确实保留了一些状态,这些状态的初始化代价很高,但可以共享—那么您应该向asp.net表明,可以重用它来提高性能。