【问题标题】:How to create a separate service apart from main application in asp.net如何在 asp.net 中创建除主应用程序之外的单独服务
【发布时间】:2011-12-17 20:10:45
【问题描述】:

我在 asp.net 中有一个主应用程序。 我可以选择通过 SMTP 发送邮件。我想做一个单独的邮件发送过程。这意味着如果我点击发送邮件按钮,邮件应该从后台发送而不影响应用程序(如单独的服务)。我试过使用 separate thread 并且工作正常,但是有没有可能在不影响主应用程序的情况下进行单独的邮件发送过程。如果我关闭应用程序(应用程序池),那么它也应该发送邮件。

谢谢。

【问题讨论】:

  • 异步操作可以解决您的问题..
  • 这是一个 ASP.NET 应用程序吗?如果是这样,那么你如何关闭应用程序?你的意思是,如果你重置 IIS 或你的应用程序池突然重置自己,这听起来像是一个很长的镜头,你确定你甚至需要担心你的应用要关闭了吗?
  • 感谢您的回复..这意味着通过 SMTP 异步发送邮件
  • 谢谢大卫......是的,你是对的......我认为没有必要担心这个......但我仍然想以任何其他方式......跨度>

标签: c# asp.net email iis smtp


【解决方案1】:

将邮件发送逻辑实现为 Windows 服务并使用 IPC(例如通过 Mutex 和 MemoryMappedFile 共享内存)在 ASP.NET 应用程序和 Windows 服务之间进行通信。

这样做的好处是,只要机器启动,邮件发送逻辑就会运行...如果您需要持久性(例如在重新启动后记住未发送的消息),您可以使用数据库或文件系统...

编辑 - 更简单的选择:

在 IIS 中设置一个 SMTP Pickup 文件夹(它内置了这个选项!)并相应地配置您的 ASP.NET 应用程序(参见例如http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspxhttp://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx)。

这样,您的应用程序将邮件作为 .eml 文件保存到目录中,而 IIS 负责其余的工作(发送/重新发送/记录等)。 SmtpClient 可以使用已经内置的拾取文件夹!

【讨论】:

    【解决方案2】:

    是的,您可以创建 Windows 服务。
    只需在解决方案资源管理器中右键单击您的解决方案,选择新项目。
    在对话框中,选择“Visual c#->Windows->Windows 服务”

    编辑 1
    如果您的邮件应该在特定时间发送,您可以将带有发送时间的邮件存储在数据库中,并让服务定期轮询该数据库(例如每分钟一次)。
    如果您想立即发送邮件,您可以使用 MSMQ 将邮件从应用程序传输到服务。

    编辑 2
    作为关于服务的旁注。它们不像常规应用程序那样易于调试,因为它们不能从 Visual Studio 启动。我通常将 Windows 服务的实际功能创建为类库。然后我创建了两个项目。首先使用我在生产中使用的类库的服务进行最终测试。然后我创建了一个控制台应用程序,它使用我用于开发和调试的同一个库。这样我就可以轻松地构建和测试我的服务,而无需每次我想在调试器中运行它时安装服务和附加调试器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2015-05-02
      • 2012-09-05
      相关资源
      最近更新 更多