2

我试图了解界面的这个isReusable属性,但需要你的帮助。IHttpHandler

每次将文档保存在我正在使用的 CMS 中时,我都会引发一个事件,并且我希望该事件触发对 HttpHandler 的操作,该操作将向订阅该文档的用户发送电子邮件。大约会有75 封电子邮件,使用我的电子邮件递送服务(邮戳),每封电子邮件大约需要 1-5 秒,所以总共大约需要 2-5 分钟

处理程序将仅接收 1 个参数(文档 ID),然后将确定向谁发送电子邮件,当然也发送给谁。

在这种情况下,将 isReusable 属性设置为 true 是否明智?为什么?

非常感激。

4

2 回答 2

3

如果您只想使用 IHttpHandler 接口实现自己的 HttpHandler,则必须实现接口的函数和属性。函数 ProcessRequest() 用于实现您自己的自定义请求处理程序,该处理程序根据您的代码返回响应。

IsReusable 用于处理程序对象的池化。因此,如果您的处理程序没有持有任何特定于请求的状态,那么您可以返回 true 以要求将其合并。这通常在您的处理程序进行非常昂贵的初始化时完成,否则您返回 true 或 false 可能并不重要(因为简单的对象分配在 .NET 中相当便宜)。页面永远不会被合并,顺便说一句。

于 2011-04-19T04:06:45.973 回答
1

如果处理程序是线程安全的,则 IsReusable 的一个简单测试是返回 true。因此,正如亚当指出的那样,处理程序应该是无状态的。

只是关于发送电子邮件的长期运行过程的一点。您将在 Web 服务器上咀嚼线程 --- 这是您可能不想做的事情以保持您的站点响应。

如果可能的话,您可以考虑使用服务总线并将工作移交给单独的进程。例如:

bus.Send(new SendEMailCommand { id = theId });

这将使您的电子邮件请求排队,从而允许您控制允许进行此处理的并发线程数 --- 在 IIS 之外在其自己的 AppDomain 中运行的线程 :)

只是一个想法。

于 2011-04-19T05:58:49.683 回答