由于数据模型和表中保存的数据量,我对一个需要很长时间才能运行的网站有几个查询.到目前为止,我一直在针对数据库手动运行它们以避免任何超时问题等.但是网站所有者已要求在网站上提供这些以便他可以获得查询结果.
我曾想过通过.NET Web服务这样做,并让经典的ASP页面异步调用它.网页将启动该过程,然后再将用户重定向到另一个屏幕.然后,Web服务将运行查询并通过CSV向用户发送结果.
但是,我似乎无法让这个工作.如果我通过IE中的屏幕调用它,但是在ASP中通过Ajax调用调用它似乎是一个问题 - 该服务运行正常 - 没有生成错误但是CSV文件都没有创建.
我在下面附上了经典的ASP代码.该服务只有一个方法,其名称为email的参数,其类型为字符串.任何人都可以看到它有什么问题吗?另外,这是做这个的最好方法还是我应该考虑另一种方法?
提前致谢,
菲尔
码
<%
message = "http://wwww.example.com/service/query.asmx/GetResults?email=test"
set req = server.createobject("MSXML2.XMLHTTP")
With req
.open "GET", message, False
.setRequestHeader "Content-Type", "text/xml"
.send
End With
works = req.responseText
response.redirect "http://www.bbc.co.uk"
%>
Run Code Online (Sandbox Code Playgroud)
异步请求工作并安排稍后交付的想法对我来说似乎非常合理。我对 ASP 的了解不够好,不知道你的尝试出了什么问题,但这真的是你在那里的一个糟糕的电话吗?seb 服务也会遭受 HTTP 连接超时的影响吗?
我的方法是让 Ajax 请求将请求放入队列并返回,无需重定向,您仍在用户发出请求的页面上,您的 JavaScript 可以确认请求已发送。或者,您更传统的“提交页面,隐藏请求,显示另一个页面”方法也可以工作,但隐藏只是将请求放入队列中。
排队方法的一个优点是,通过控制守护进程的数量,我们可以在服务请求时获得受控的并行性 - 避免数据库过载。此外,队列可以持续存在并允许从容地传递响应。
我假设 MS 队列让您有一个守护进程来处理请求并传递响应。显然,电子邮件是有效的,但让我觉得有点不友好。使用 Ajax 风格的界面,可以很容易地以不可见的方式轮询请求的状态并在准备就绪时获取结果,甚至可以使用 Comet 风格的推送响应传递。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |