使用AJAX或其他方式的经典ASP后台进程?

时间:2012-07-23 09:52:38

标签: jquery asp-classic background-process

我正在开发经典ASP 网站。在一种形式中,将从UPS站点获取结果以显示运费,现在在第一次请求时从 UPS站点获取结果时,通常需要几分钟的时间来回复。

因此,为了改善用户对网站的体验,此UPS运费计算应在后台完成,当后台流程完成后,结果应显示为表格。

为了解决这个问题,我们使用了 jQuery AJAX 方法,但问题是用户必须在同一页面上停留一分钟,直到UPS响应,如果他导航到其他页面,XHR请求将被中止。

那么你能建议,对于后台进程,哪种方式必须在Classic ASP中选择,或者如何在不中止AJAX请求的情况下导航到其他页面?

2 个答案:

答案 0 :(得分:1)

对于诸如此类的慢速后端进程,使用基于服务器端的sql队列系统几乎总是一个好主意。

具体来说,在您的服务器上,创建二进制/服务/脚本以读取队列表,从UPS获取数据并将结果写回队列表 - 保持状态ID。

然后,您的所有站点需要做的是将请求插入到队列表中,然后您可以使用ajax继续检查队列表以查看数据是否存在。

非常基本示例(如果没有您举例,很难说):

CREATE TABLE [dbo].[ParcelQueue](
    [JobID] [int] IDENTITY(1,1) NOT NULL,
    [RequestTime] [datetime] NULL,
    [ParcelTrackingNumber] [varchar](255) NULL,
    [StatusID] [smallint] NULL,
    [Result_DeliveryDate] [datetime] NULL,
 CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
    [JobID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[test] ADD  CONSTRAINT [DF_test_RequestTime]  DEFAULT (getdate()) FOR [RequestTime]
GO

潜在状态ID:

  1. UPS Response OK
  2. UPS响应失败

答案 1 :(得分:1)

我只是创建了一个ASP页面,它将以Async方式将虚拟数据传递给UPS服务,而不是创建后台窗口进程,该进程将定期调用该ASP页面。

这样,无论用户何时到达现场,他们都不会因为第一次UPS请求而遇到响应缓慢,因为我们的后台流程已经使UPS通道保持打开状态。