【问题标题】:HttpHandler isReusable, true or false for sending ~75 emails at a timeHttpHandler isReusable,true 或 false 一次发送约 75 封电子邮件
【发布时间】:2011-04-19 03:59:11
【问题描述】:

我正在努力了解IHttpHandler 接口的isReusable 属性,但需要您的帮助。

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

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

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

非常感谢。

【问题讨论】:

    标签: c# httphandler ihttphandler


    【解决方案1】:

    如果你只是想实现你自己的 HttpHandler 使用 IHttpHandler 接口你必须实现一个函数和一个属性 的界面。函数 ProcessRequest() 用于实现 您自己的自定义请求处理程序,根据 你的代码。

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

    【讨论】:

    • 谢谢你......不过,根据我的情况,你会说它应该被重复使用吗?我的猜测是它应该。
    【解决方案2】:

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

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

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

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

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

    只是一个想法。

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多