我正试图了解isReusable
界面的IHttpHandler
属性,但需要你的帮助。
每次将文档保存在我正在使用的CMS中时,我都会发起一个事件,我希望该事件能够向HttpHandler发起一个动作,该动作将向订阅该文档的用户发送电子邮件。将大致 75封电子邮件,并使用我的电子邮件递送服务(邮戳)每个电子邮件 1-5秒,所以总共大约2- <5分钟。
处理程序将只接收1个参数(文档ID),然后确定将电子邮件发送给谁,当然还要发送给他们。
在这种情况下,将isReusable属性设置为true是明智的吗?为什么?
非常感谢。
答案 0 :(得分:3)
如果您只是想使用。实现自己的HttpHandler IHttpHandler接口你必须实现一个函数和一个属性 的界面。 ProcessRequest()函数用于实现 您自己的自定义请求处理程序,它根据返回响应 你的代码。
IsReusable用于汇集处理程序对象。所以,如果您的处理程序不是 持有任何请求特定状态然后你可以返回true来询问它 汇集。这通常在您的处理程序执行非常昂贵的初始化时完成, 否则,如果你返回真假,它可能无关紧要(因为 简单的对象分配在.NET中相当便宜。页面永远不会 汇集,BTW。
答案 1 :(得分:1)
如果处理程序是线程安全的,则一个简单的测试是IsReusable返回true。因此亚当指出处理程序应该是无状态的。
关于长期发送电子邮件过程的重点。你将在网络服务器上咀嚼线程 - 这是你可能不想做的事情,以保持你的网站的响应。
如果可能的话,您可以考虑使用服务总线,并通过这样做将工作交给单独的流程。 e.g:
bus.Send(new SendEMailCommand { id = theId });
这将对您的电子邮件请求进行排队,允许您控制允许此处理的并发线程数 - 在自己的AppDomain中在IIS外部运行的线程:)
只是一个想法。