我想开发一个交付应用程序(自托管WCF服务),它允许安排电子邮件。用户将为电子邮件分配计划并发送。 WCF服务应该能够选择电子邮件并在预定时间发送。
我在这里使用什么方法?我正在考虑关注替代方案
除了上面提到的两个之外,有人可以建议我一个可能的解决方案吗?
[编辑]:我可以使用SQL代理吗?
谢谢,
拉姆
答案 0 :(得分:1)
让您的WCF服务将电子邮件请求排队到数据库表。然后编写一个Windows服务,定期扫描表,发送电子邮件,然后用结果更新表。
如果您使用的是SQL Server,则可以直接从中发送电子邮件,并安排作业发送电子邮件,从而使您无需部署Windows服务。
答案 1 :(得分:0)
这取决于您的非功能性要求...... :-)
我可以想象你在这项服务中需要一些可靠性。 WCF服务的生命周期取决于其主机。例如。如果这是IIS,则应用程序池将在一定的空闲时间后回收(没有请求进入IIS)。这将恳求与后台工作者不同的解决方案。正如您所建议的,这可能是第三方调度程序,但Windows中也有调度程序。 (请参阅http://technet.microsoft.com/en-us/library/dd363786(WS.10).aspx)使用小型控制台程序,您可以让Windows计划程序调用您的服务,或者自行发送电子邮件。
答案 2 :(得分:0)
我看到了“......除了上面提到的两个......”但我认为没有别的办法来实现这个目标:) 在Windows服务中构建一个无限循环,如下所示:
private void DoTheThing()
{
try
{
while (true)
{
TheThing e = new TheThing();
Thread t = new Thread(new ThreadStart(e.Run));
t.Start();
Thread.Sleep(1000);
}
}
catch (ThreadAbortException) { }
catch (Exception ex) { /* Whatever error handling you got */ }
}
...其中TheThing有一个方法Run,可以每1秒执行一次所需的操作。这看起来很愚蠢(虽然(真的) - 是的,对,但是自从.NET 1.0以来至少在30台服务器上一直在不停地工作:)只需确保在新线程的Windows服务启动时调用此DoTheThing方法。
希望这会有所帮助:)