【问题标题】:WCF Service: Perform work after returningWCF服务:返回后执行工作
【发布时间】:2012-09-20 14:02:10
【问题描述】:

我目前正在开发的 WCF 服务中有一个方法,我想在将结果返回给用户后做一些工作。

服务的用户正在发送我们存储在数据库中的“项目”,然后通过调用其他服务和其他可能需要大量时间(几分钟)的东西来处理。问题是用户真的只需要知道项目的数据库 ID。

所以我不希望用户等待所有这些事情都完成。在我这样返回之前启动 System.Threading.Tasks.Task 来执行这样的繁重工作是否是一个合理的解决方案:

int id = InsertIntoDB(item);
Task.Factory.StartNew(() => HeavyProcessing());
return id;

【问题讨论】:

    标签: c# wcf web-services


    【解决方案1】:

    当然,这个选项很好。你有什么问题吗?

    另一种选择是简单地在客户端进行异步调用,然后服务器实现也可以是同步的,但这取决于您的场景 - 此选项更易于实现(无异步),但它可能会使服务器达到了一些使用配额(例如最大并发客户端)。

    【讨论】:

    • 客户端的应用程序(一大堆)已经到位,所以这不是一个真正的选择,客户端获取ID的速度越快越好,所以服务器端解决方案是可取的。
    【解决方案2】:

    成功完成这项任务有多重要? IIS 托管的 WCF 服务可能会被 IIS 主动终止,在这种情况下,后台线程可以在执行中途停止。如果这是一个问题,您最好在消息队列中对操作进行排队,并让 Windows 服务在它可用时接收它。在这种情况下,Windows 服务更加可靠。

    【讨论】:

    • 这是一个有趣的观点。由于我们目前正在服务方法中进行所有处理,因此我们已经受到此问题的影响,所以我想我们现在可以忍受它,但下一个版本可能会涉及服务。跨度>
    • 对于您的 vNext,请查看这篇文章。你可能会觉得很有趣:cuttingedge.it/blogs/steven/pivot/entry.php?id=95
    猜你喜欢
    • 2023-03-09
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多