ASP.NET是否继续可靠地处理用户是通过JavaScript导航离开后也要求?(Does ASP.

2019-07-19 17:33发布

环境:

  • Windows Server 2003中 - IIS 6.x的
  • ASP.NET 3.5(C#)
  • IE 7,8,9
  • FF(无论最新的10个版本)

用户方案:

用户输入针对大型数据集的搜索条件。 发起请求后,他们浏览到一个结果页面,在那里等待,直到数据被加载,然后可以细化的数据。

技术方案:

用户发送的搜索条件后(通过AJAX调用),UI调用后端服务。 后端服务查询事务处理系统(一个或多个),并将所得数据置于一个分贝“缓存” - 非规范化表,建立用于进一步细化中的数据(即排序,筛选)。 UI等待,直到数据缓存,然后在得到通知,该过程完成后,导航到结果页。 结果页面,然后进行调用从非规范化表中获取数据。

问题:

搜索是针对最终不得不查询根据输入的条件很多系统大型查询比较慢(15-25秒)。 它是用于其他查询(<4秒)比较快的。

技术方面的限制:

  1. 我们不能完全重新设计这个搜索/结果系统。 有办法很多,这里复杂的UI和后端是如何联系在一起的。 该页面需要进行搜索条件后开启(因为不能在计算器上得到解决制约)。

  2. 我们也不能要求该组织对非规范化的数据搜索之前,因为数据必须是实时的,即如果用户在其他系统的变化,该数据有,如果他们做一个搜索之后才能正确显示。

的过程,我想跟进:

  1. 我要骗一点。 我想通过发布在消防忘记模型异步HttpHandler的“缓存”的要求。

  2. 发出查询后,我想将页面转换到结果页。

  3. 在过渡页,我想轮询“高速缓存”表,看是否数据已经被插入到它。

  4. 我想这样做过渡马上究其原因,是结果页面上本身昂贵的(即使没有获得数据) - 即使得到调用从缓存中获取数据服务之前还是2秒的加载时间。

题:

这会否是通过异步处理程序调用的ASP.NET线程可靠地继续处理,即使我使用JavaScript重定向从页面导航离开?

技术边界2:

是的,我知道......这个搜索过程不健全高效。 没有什么我可以做的现在。 我试图尽我所能让它表现得更好一点,同时我们继续研究我们如何来重新设计它。

如果你的答案是:“把它扔掉,并开始了”,请不要回答。 这是不能接受的。

Answer 1:

是。

还有这是用来知道,如果一个长期运行的进程仍然是连接属性Response.IsClientConnected。 这样做的原因属性是一个进程将继续运行,即使客户端断开连接,必须通过属性手动检测和手动关闭如果发生过早断开。 这是默认情况下不停止在客户端断开正在运行的进程。

参考这个属性: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

更新

FYI这是一个非常糟糕的属性依靠这些天插座。 我强烈建议你做的方法,让你快速完成,在某些数据库或需要长时间运行的任务队列中指出,完成一个请求,可能会使用RabbitMQ的或类似的东西,那轮流使用socket.io或类似的更新网页或应用程序一次完成。



Answer 2:

如何不做异步操作上的ASP.NET线程呢? 让ASP.NET代码调用队列中的数据搜索服务,然后返回到浏览器与服务,在那里它就会重定向到等待完成的结果,结果页面的标记? 结果页面将轮询使用令牌从服务。

这样一来,你就不必担心ASP.NET是否会以某种方式了解到,浏览器已经移动到不同的页面。



Answer 3:

另一种选择是使用线程( System.Threading )。
当用户发出搜索标准,服务器开始处理页面请求,创建负责执行搜索一个新线程,并完成反应又回到了浏览器,重定向到结果页面,而该线程将继续在服务器上执行背景。
结果页将保持验证服务器上,如果查询的执行已经完成的开始线程将共享进度信息。 当它完成,下一个Ajax调用是由结果页面做返回的结果。

它也可以使用WebSockets的考虑。 在某种意义上说,Web服务器本身可以告诉浏览器,当它完成处理查询执行,因为它提供全双工通信通道。



文章来源: Does ASP.NET continue reliably processing a request even after a user is navigated away via javascript?