0

有几个类似的问题。我只想澄清一个部分。

如果我想发送一封电子邮件(最多 30 封)以响应用户的操作,我应该从什么执行上下文中执行此操作?

  1. 我是否进行同步呼叫(邮件服务器在同一个数据中心,所以实际发送速度很快)?

  2. 我是否产生一个线程并从那里发送它?这样每个用户请求发送邮件都由一个新线程处理?

  3. 我有处理电子邮件队列的后台线程吗?

我认为最大的问题是它是一个共享的网络托管。所以我不知道安装/启动Windows服务或启动专用线程的好方法是什么。

详细信息:ASP.NET MVC 应用程序,托管在 IIS 7.0 集成模式上,在使用 discauntasp.net smtp 服务器的 discountasp.net 上。

有没有更好的办法?实现此目的的“标准”方法是什么?

4

2 回答 2

1

无论是否共享主机,您的线程将只能使用分配给您的资源。如果您一次只发射 30 个队列,那么您可能想要使用队列,因为在这种情况下旋转 30 个线程对我来说似乎有点愚蠢。与向邮件服务器发送一封电子邮件相比,创建线程并关闭它们可能需要更多的处理时间。(半开玩笑)

于 2010-02-06T08:11:55.570 回答
1

大多数数据中心都有一个 smtp 地址,他们可以提供给您以发送邮件。我只是创建邮件对象并将其发送到本地 smtp 服务器。如果您没有访问权限,那么您可以让您的 smtp 适配器连接到外部服务并提供它的身份验证信息,以便您通过它发送邮件。非本地地址通常需要这个。

如果您必须发送大量邮件或者您的服务器负载很高,我建议您生成一个不同的线程,或者如果您可以访问您添加的服务中的框,该服务可以提取并发送它们与您的 Web 应用程序分开。这是因为您的 Web 应用程序中的线程可能会被回收或死亡,如果您最终得到一个长时间运行的进程,这可能意味着数据丢失或功能丧失。通过建立队列,您可以在不影响 QoS 的情况下为用户提供快速功能。

如果您建议这是一个共享框,那么您将需要生成一个新线程来为您执行此操作。反应式扩展可以为您提供更强大的方式来执行此操作,并且是 TPL(任务并行库)的一部分。如果您需要更具体的示例,请告诉我。

于 2010-02-06T19:22:26.027 回答