如何在Web服务上进行呼叫后处理?

时间:2009-05-14 19:28:45

标签: asp.net wcf web-services

有没有办法让Web服务(WCF / ASMX / etc)调用在返回结果后进行一些处理?注意我不是在寻找异步调用,因为在额外处理完成之前,客户端需要尽快返回结果。

主要的限制是,据我所知,我在服务器上运行代码的唯一方法是通过ASP页面或Web服务。

这可以通过产生后台线程来完成吗?

2 个答案:

答案 0 :(得分:1)

您想要一个客户不了解或控制成功的副作用?即使您返回立即同步答案, 也是异步处理。如果结果是可观察的并且客户感兴趣,那么您应该有一些方法让客户和运营商确定它是否在之后成功。

这取决于您如何托管您的Web服务(与提供通信和激活层的WCF正交)。普通的Web服务托管不允许您处理WS调用之外的事情,主要是为了防止您在脚下拍摄并吃掉所有服务器资源。

  • 在ASP.NET ASMX托管下,您可以向thread pool输入另一个任务:但是,如果服务器负载过多,可能会在没有警告的情况下终止此任务。我们最近不得不在生产服务中使用它:幸运的是,服务器主机不会遇到高负载。我们对这个解决方案的可靠性感到有些担心。
  • 我没有使用Windows Activation Services,但应该有一种方法可以在单独的线程中产生额外的工作。
  • 您始终可以实施自己的工作流程,例如:作为Windows服务,并根据需要向其提交工作。这并不是非常困难,但需要一些工作才能可靠且可扩展。不是最喜欢的,WAS的目的是为了解决这个问题。

产生另一个线程很容易,但IIS不应该允许你自由地做,特别是如果它在任何类型的多应用程序web酒店中运行。

答案 1 :(得分:1)

那么,您的Web服务很可能会托管在Windows服务器上,对吧?你可以做任何事情:

  • 启动Windows工作流程
  • 将一个条目写入数据库表,然后由另一个应用程序/进程扫描,然后根据该条目执行某些操作(例如发送电子邮件等)。
  • 启动控制台应用
  • 在相同或不同的服务器上调用另一项服务

我认为你的选择真的很无穷无尽。但是 - 它们本身并不直接属于Web服务的一部分 - 在 Web服务调用结束之前,您必须将它们从中删除。 ASMX或WCF中没有任何内容允许您“发送请求然后继续执行” - 您的服务方法在完成后发送响应。

马克