尽管PreSendRequestContent事件被击中,但长时间运行的AJAX请求没有收到响应

时间:2012-08-10 14:45:31

标签: asp.net iis windows-server-2008 iis-7.5

这个问题让我有点疯狂 - 我现在已经花了3天的时间。为了让它更烦人,我无法在我们的开发/测试环境中复制它 - 它似乎只能在我们的生产环境中体现出来。

情景:

有一个页面可以触发上传器 - 这个上传器是一个YUI2 javascript上传器组件,它使用闪存。文件上传到我们的服务器,之后会激活 uploadsuccess javascript事件,这会导致向服务器发出ajax请求,以便我们可以进行进一步处理。处理需要相当长的时间 - 最多12分钟。我知道这本身就是一个问题,但是为此创建异步线程进程所需的工作相当复杂,我们已经安排了另一天。现在,我们已经增加了Web.config中的Web请求超时限制,以便请求不会超时。

在我们的开发/测试环境中,该过程完成并收到响应。

在我们的生产环境中,该过程完成,但未收到任何响应。 :(

我尝试找到问题:

我在代码中添加了大量的日志记录,甚至在asp.net页面生命周期的每个事件都被记录时记录的记录点中删除了。

操作似乎正确处理,然后每个页面生命周期事件都会一直打到最后一个(PreSendRequestContent在内容响应发送回客户端之前触发)。但是,我绝对没有收到任何回复 - 我甚至有提琴手运行以确保它不是一个奇怪的浏览器问题。没有。 :(

我是开发人员,所以我觉得我在调试方面已经筋疲力尽了。在它离开asp.net堆栈之后,在它返回客户端之前,问题似乎存在于IIS的更深处。

我的请求:

有没有人对可能发生的事情有任何偏见,或者我可以做些什么来继续进行故障排除和调试?

如标签中所述,该应用程序是一个ASP.NET应用程序(特别是MVC 2),运行在Windows Server 2008计算机上的IIS 7.5 Web服务器上。

如果你能以任何方式提供帮助,我会赞美你们。

你的真诚; 沮丧的开发者

1 个答案:

答案 0 :(得分:0)

好的,所以问题已经解决,但是我从来没有能够找出确切的问题和请求被删除的点。这是一个间歇性的问题,只是在非常长时间运行的请求中被击中,这对于网络来说总是一个坏主意。

我通过创建一个包含多个工作线程的后台工作队列解决了这个问题。现在,对原始操作的请求将移至工作队列。我还公开了一个状态页面,用户可以在其中跟踪这些项目的进度,甚至可以重试失败的项目。

似乎运行良好,UI的响应速度更快,这总是一件好事。