HttpHandler isReusable,true 或 false 一次发送约 75 封电子邮件

发布于 2024-11-02 01:56:29 字数 395 浏览 4 评论 0原文

我正在尝试了解 IHttpHandler 接口的这个 isReusable 属性,但需要您的帮助。

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

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

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

非常感谢。

I'm trying to get my head around this isReusable property of the IHttpHandler interface but need your help.

I'm raising an event each time a document is saved in a CMS I'm using, and I want that event to fire off an action to a HttpHandler that would send emails to users subscribed to that document. There will be roughly 75 emails, and using my email delivery service (Postmark) that takes about 1-5 seconds per email, so a total of about 2-5 minutes.

The handler will receive only 1 parameter (the document ID) and will then figure out who to send emails to and of course send them.

In this scenario, is it wise to set the isReusable property to true? And why?

Much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

享受孤独 2024-11-09 01:56:29

如果您只想使用以下方法实现自己的 HttpHandler
IHttpHandler 接口你必须实现一个函数和一个属性
界面的。 ProcessRequest()函数用于实现
您自己的自定义请求处理程序,它根据以下内容返回响应
你的代码。

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

If you just want to implement your own HttpHandler using the
IHttpHandler interface you have to implement a function and a property
of the interface. The function ProcessRequest() is used to implement
your own custom request handler which returns the response according to
your code.

IsReusable is for pooling of the handler objects. So if your handler is not
holding any request specific state then you can return true to ask that it
be pooled. This is typically done when your handler does very expensive initialization,
otherwise it probabaly doesn't matter if you return true or false (since
simple object allocation is fairly inexpensive in .NET). Pages are never
pooled, BTW.

风吹雨成花 2024-11-09 01:56:29

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

只是关于发送电子邮件的长期运行过程的一点。您将消耗网络服务器上的线程——为了保持网站的响应能力,您可能不想这样做。

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

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

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

只是一个想法。

A simple test is for IsReusable to return true if the handler is thread safe. So as Adam pointed out the handler should be stateless.

Just a point on the long-running process of sending e-mails. You will be chewing up threads on the web server --- which is something you may not want to do to keep your site(s) responsive.

If at all possible you could consider a service bus and hand off the work to a separate process by doing so. e.g.:

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

This will queue your e-mail requests allowing you to control how many concurrent threads you allow for this processing --- threads that are running outside IIS in their own AppDomain :)

Just a thought.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文