0

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

场景:

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

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

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

我试图找到问题:

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

该操作似乎可以正确处理,然后每个页面生命周期事件都会一直命中,直到最后一个事件(在内容响应发送回客户端之前触发的 PreSendRequestContent)。但是,我完全没有收到任何回复——我什至启动并运行了 fiddler 以确保这不是一些奇怪的浏览器问题。没有。:(

我是一名开发人员,所以我觉得我在这里的调试方面已经用尽了我的选择。问题似乎在 IIS 中更深的地方,在它离开 asp.net 堆栈之后,在它返回到客户端之前。

我的请求:

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

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

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

忠实于你的; 沮丧的开发者

4

1 回答 1

0

好的,所以问题已经解决了,但是我永远无法找出确切的问题和请求被丢弃的点。这是一个间歇性问题,仅在非常长时间运行的请求期间才会受到影响,无论如何这对网络来说总是一个坏主意。

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

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

于 2012-08-28T22:11:01.377 回答