如果在我道歉之前有人问过这个问题,这是 .NET 2.0 ASMX Web 服务,我再次道歉 =D
仅公开 Web 服务的 .NET 应用程序。每天大约 1000 万条消息在多个 IIS 服务器之间进行负载平衡。每个传入消息都是 XML,而传出消息是 XML。(XMLElement)(我们有强大的服务器运行在类固醇上)。
我有一个 SLA,所有消息都在 X 秒内处理。
一个函数,链接方法,在这个过程中现在需要 10-20 秒,每个事务都需要它,但是在 Web 服务返回结果之前发生并不重要。正因为如此,我建议把它放到另一个线程上,但现在意识到我的话和他们背后热切的开发人员可能还没有完全考虑到这一点。
下面的示例在左侧显示了当前流程。在右侧正在尝试的内容
实际上,我正在寻找的是让 Web 服务产生一个长时间运行(10-20 秒)的线程,即使在 Web 服务完成后也会执行该线程。
这实际上是正在发生的事情:
Thread linkThread= new Thread(delegate()
{
Linkmembers(GetContext(), ID1, ID2, SomeOtherThing, XMLOrSomething);
});
linkThread.Start();
使用它,我们将开发盒上的时间从 19 秒减少到 2.1 秒,这是相当可观的。
我担心随着我们获得的流量,如果供应商/外部方决定限制我们,IIS 可能会决定在它们完成处理之前回收/杀死这些线程。我同意我们的解决方案可能不是“最好的”,但是我们没有时间构建队列系统或其他 Windows 服务来处理这个问题。
有一个更好的方法吗?应考虑的任何警告?
谢谢。