Roy*_*mir 11 .net c# asp.net httphandler .net-4.0
我一直在使用Ashx随jQuery.我读过msdn,我在谈论IHttpHandler.IsReusable房产.
获取一个值,该值指示另一个请求是否可以使用IHttpHandler实例.
他们的意思是什么the IHttpHandler instance.?" 他们是否试图让static每个人都能看到和使用它?它是由同一个可重复使用的是什么?(QueryString,cookies等?)
如果我写这个:
public class MyHttpHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Write(DateTime.Now.Ticks.ToString());
}
public bool IsReusable
{
get { return true; }
}
}
Run Code Online (Sandbox Code Playgroud)
似乎每个请求会得到其自己跟上时代的 - Datetime值.
Rex*_*x M 13
在您的示例中,您不管理任何州.任何人都可以ProcessRequest在同一个实例上调用多次,他们将获得一个新的DateTime.
但是,如果你这样做了:
private DateTime _dateTime = DateTime.Now;
public void ProcessRequest(HttpContext context)
{
context.Response.Write(_dateTime);
}
Run Code Online (Sandbox Code Playgroud)
现在,每次实例化处理程序实例后,您都会得到相同的响应.除非ASP.NET每次都生成一个新的.
IsReusable可以指示您的处理程序类是否管理可以在不同请求之间共享的任何状态.如果它管理不可共享的状态,那么它不可能是外部幂等的 - 或者甚至可能不是线程安全的.ProcessRequest使用相同的输入条件调用可能不会产生相同的输出,因为您的特定处理程序实现还具有一些在确定输出时无法共享的实例级变量.(事实上,从技术上讲,您当前的实现就是一个例子).在这些情况下,实例可能不是"可重用的" - 并且ASP.NET每次都需要生成一个新实例以确保可预测性.
因此,对于你不管理状态的情况,或者你有非常简单的处理程序,状态是"明显的"(就像我们这里的例子),IsResuable可能看起来毫无意义.但是如果你有一个非常复杂的处理程序 - 可能是一个确实保留了一些初始化成本高但可以共享的状态 - 你可能希望向ASP.NET表明可以重用它来提高性能.
| 归档时间: |
|
| 查看次数: |
5593 次 |
| 最近记录: |