【问题标题】:help with creating windows server帮助创建 Windows 服务器
【发布时间】:2010-10-03 07:27:33
【问题描述】:

我是 ASP.NET 程序员,没有创建 Windows 服务的经验。 我需要创建的服务应在每个指定时间段向我们的客户发送电子邮件。该服务应该可以解决同时发送数百封电子邮件并阻止服务器上的 SMTP 服务,而 SMTP 有很多时间段处于空闲状态而没有发送任何内容的问题。

想法是创建一个服务,我将向其发送整个电子邮件和地址,在服务内部我将拥有某种类型的数据集(我不知道应该在 winforms/winservices 中使用哪一个)和一些基本计时器功能(即每 3 秒收到第一封邮件并发送)... 事情是有两种主要类型的邮件,应该是主要优先级的注册邮件和低优先级的提醒邮件(即您一个月没有进入站点)。我更喜欢用两个数据集创建这个优先级问题,当主要的一个是空的,不太重要的一个发送。

另一个问题是如何从同一服务器上的 asp.net 应用程序访问此服务?

您将如何用代码编写或者至少指出我如何编写,我知道 MS 网站上有很多关于基本服务的解释,但由于我不太了解问题,我更喜欢在这里解释。

感谢您的宝贵时间。

【问题讨论】:

    标签: .net windows windows-services


    【解决方案1】:

    首先,如果您知道如何从您的 asp.net 应用程序发送电子邮件,那么您根本不需要 Windows 服务。继续阅读...

    我遇到了与您类似的问题,因为我的网站所在的 ISP 对它可以在一天内发送的电子邮件有限制。因此,我创建了包含电子邮件的数据库表,并将它们存储在其中,并创建了一个网页来检查有效的限制,确定发送电子邮件是否安全,如果是则发送。

    发送(或不发送)后 - 该页面休眠了一段时间(您可以将 Sleep() 插入其中 - 不要使用任何循环,因为它会消耗您的 CPU)然后再次通过 http 请求触发自身,如果还有更多邮件要发送。

    每个填满邮件队列的页面也会触发邮件发送页面,所以当队列实际上为空时它不会运行。

    我猜,要么,要么你真的去服务。

    【讨论】:

    • 您的解决方案几乎没有缺陷。我需要在每个时间段调用此页面,而服务能够获取窗口时间并在没有触发器的情况下异步使用它。第二个是我需要在当前线程上设置 Sleep(),这将迫使我再创建一个应用程序,这样主网站就不会进入 Sleep() 模式。
    • @Eugene:我根本不喜欢 Windows 服务,但对于一个 asp.net 程序员来说,如果你这样做,你将不得不忍受一些苛刻的学习曲线和很多 wtf方式。我知道服务,并没有从它们那里运行,但是...当您尝试安装服务,尝试调试它等等时,您会记得这篇文章... :) 也许我在这里咆哮 - 但是嘿,有时甚至咆哮也很有用。
    【解决方案2】:

    我建议您查看可用的各种电子邮件营销服务,其中许多提供 API 或至少一个您可以通过 .Net 代码自动化的流程。我真的会避免尝试设置您自己的邮件服务器,因为即使合法,也很难保持其正常运行,因为任何错误的滥用都会将您列入黑名单,并且需要很长时间才能进入白名单(很多 ICANN-持续的、合法的活动),因此不得不从新 IP 重新开始是令人沮丧的。

    与该领域的专业人士合作,确保他们遵循 ICANN 流程和程序(您也应该这样做),您会发现他们拥有您所需的一切,并为您省去大量麻烦。

    【讨论】:

    • 谢谢。问题是我的应用程序很难与外部邮件服务集成......只有当我没有任何其他选择时,我才会这样做。您对拥有自制解决方案的许多问题是正确的,但仍然需要时间来集成我没有的此类服务。
    • 与现有解决方案集成相比,构建您自己的解决方案将花费您更长的时间。
    【解决方案3】:

    至于创建 Web 服务,那里有大量示例,只需 google 即可获得“c# windows service example”。 举两个例子:

    对于数据交换:我会将必要的操作存储在数据库表中,并定期从服务中扫描这些表。 否则,您可以使用 .NET 远程处理或消息队列或 .NET WCF。

    马里奥

    【讨论】:

    • 我确实特别要求不要提供带有链接的答案以创建简单的服务,因为我可以自己用谷歌搜索。虽然感谢数据库输入,但我认为将消息保存在内存中会更好。
    【解决方案4】:

    创建 CONSOLE 应用程序。

    在数据库中创建 2 个队列。对于电子邮件。

    在控制台应用程序中,定期轮询队列,并在适当的时候发送电子邮件。

    在您对应用程序满意之前不要进行服务。

    调试完成后,创建服务,安装并运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2011-08-30
      相关资源
      最近更新 更多