WCF和执行服务后的更长​​操作

时间:2009-10-27 09:50:31

标签: wcf multithreading

我有很多方法的WCF服务。我希望在执行其中一种方法后,电子邮件将发送给一些用户。发送电子邮件可能是一个长时间运行的操作,我不希望这个方法的调用者等待。呼叫者应在计算后立即收到回复,然后发送电子邮件。我正在考虑在新线程中发送电子邮件,但我不确定在IIS中托管WCF服务时启动新线程是否正确。有人可以告诉我这种情况下的最佳做法是什么?

提前致谢 Lukasz Glaz

2 个答案:

答案 0 :(得分:0)

在IIS中托管服务时,启动新线程没有任何问题,但请考虑这一点:

发送电子邮件有多重要?

启动后台线程时,无法保证在操作完成之前进程不会崩溃。在最坏的情况下,机器可能会因外部原因(断电,蓝屏死机等)而崩溃,而且你无法阻止它。在这种情况下(也可能是不太严重的情况),线程可能永远不会完成其操作,这意味着永远不会发送电子邮件。

如果您能接受这一点,那么从新主题发送电子邮件就可以了。

另一方面,如果您必须保证始终发送电子邮件,则需要将该操作移交给某种事务队列(MSMQ,数据库表或其他一些事务机制)。

在这种情况下,您需要另一个强大的后台进程(想到一个Windows服务),它将消息从队列中拉出并发送电子邮件。即使服务器突然重新启动,此体系结构也可确保最终发送电子邮件。但是,这是一个更复杂的设置,所以我认为只有在要求声明必须发送电子邮件时才应该实现它。

答案 1 :(得分:0)

您也可以进行操作OneWay,因此客户端不会等待操作的结果。在我看来,这是正确的选择,因为你基本上不关心操作的结果(邮件失败等等)。如果您想确保交付,您必须为您的服务配置可靠性。