0

私はクラシック ASPサイトに取り組んでいます。1 つのフォームでは、配送料を表示するために UPS サイトから結果が取得されます。現在、最初のリクエストで UPS サイトから結果を取得する場合、通常、返信に数分かかります。

そのため、サイトでのユーザー エクスペリエンスを向上させるには、この UPS 配送計算をバックグラウンドで実行し、バックグラウンド プロセスが終了したときに結果をフォームに表示する必要があります。

これを解決するために、jQuery AJAXアプローチを使用しましたが、問題は、ユーザーが別のページに移動すると、UPS が応答するまで同じページに数分間留まらなければならず、XHR 要求が中止されることです。

バックグラウンド プロセスについて、Classic ASP でどの方法を選択する必要があるか、または AJAX 要求を中止せずに他のページに移動する方法を提案できますか?

4

2 に答える 2

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. 保留中
  2. UPS応答OK
  3. UPSの応答に失敗しました
于 2012-07-23T11:46:33.007 に答える
1

ダミー データを UPS サービスに非同期で渡す ASP ページを 1 つ作成し、その ASP ページを定期的に呼び出し続けるバックグラウンド ウィンドウ プロセスを作成しました。

このようにして、ユーザーがサイトに来るたびに、最初の UPS 要求が原因で応答が遅くなることはありません。これは、バックグラウンド プロセスが既に UPS チャネルを開いたままにしているからです。

于 2012-09-04T19:13:56.680 に答える