0

WebアプリケーションのサーバーでXMLを処理しているという要件があります。asp.netページにボタン
があると仮定します。ユーザーがボタンをクリックすると、button_click()->という関数が呼び出され、XMLを処理するためのサービスメソッドが呼び出されます。

問題のシナリオ::
ここで、XMLを処理していて、処理の50%が完了したとします。XMLの一部の値が無効であるため、ユーザーの確認を取得する必要があることに気付きました。この時点で、ユーザーに「はい」または「いいえ」(javascriptプロンプトの場合もあります)を示すプロンプトを表示してから、次のようにします
。1.ユーザーが「OK」をクリックした場合-> XMLの残りの50%の処理を続行したい場合
2. ifユーザーが[いいえ]をクリックします->処理を停止してエラーメッセージを表示します。

多くの試行錯誤とWebアプリケーションの開発に関する知識を経て、ユーザーが[OK]をクリックしたときにいくつかのフラグを使用してサービスの実行を再開しない限り、これを行う方法はないと感じました。しかし、私の同僚は納得しておらず、それを行う方法があるはずだと言っており、私にはその知識が不足しています。 その静かな興味深い問題

**注:実際には既存のデスクトップアプリケーションをWebに移植しているため、ダイアログボックスの問題が発生します。

この専門家に関して私を助けてください!また、そのようなシナリオを処理する他の方法はありますか?

編集:より多くの情報を追加します。
実際、ここでXML処理とは、すべてのユーザーがWINDOWSサービスを使用してサーバーによって作成されたXMLを持っていることを意味します。ユーザーがボタンをクリックすると、そのXMLを処理する必要があり、すべてが正しい場合は、サードパーティのサービスを呼び出して結果を取得し、DBを更新する必要があります。
時々起こることは、XMLを作成するWINDOWSサービスがいくつかの無効な値を置くことです(私たちの管理下にないため、それらを修正することはできません)。したがって、一部の値が無効であり、続行するかどうかをユーザーに確認する必要があります。このようにして、ユーザーの同意を得て無効な値を送信していることを二重に確認したいと思います。問題は、XMLファイルの最後で値が無効であることがあると特定することです(これを変更することはできません)。そのため、XMlをもう一度処理したくありません。

4

2 に答える 2

0

フロントエンド (jquery/JavaScript) が長時間実行されているプロセスからステータスの更新を継続的にポーリングするプロセスをセットアップする必要があります。これの典型的な用途は、完了率ゲージを更新して、ユーザーが進行状況を確認できるようにする場合です。ただし、この場合は、%done 値を取得する代わりに、ステータス コードやメッセージを取得します。メッセージがある場合は、それをユーザーに表示し、サーバーに更新します。ステータスコードがフロントエンドに送信されると、バッキングされたプロセスは待機状態に入り、ユーザーの応答のためにフラグをポーリングする必要があります (たとえば、db テーブルの値のように単純な場合もあります)。

%done タイプのポーリング プロセスの例を次に示します。

http://sudhirmurthy.blogspot.com/2011/12/update-on-long-running-server-tasks.html

于 2012-12-14T12:01:46.557 に答える
0

「 XML処理」が何であるかの実際の詳細を詳しく説明していないので、XMLドキュメントのアップロード/解析(おそらく何らかのインポート)であると想定します。

最初のステップは、サーバーが特定の状態で XML の実行 (または処理)を一時停止できるようにすることです。これを行う唯一の方法は、処理の現在の状態 (行番号、処理されたセグメントなど) を保存することです。この状態は、サーバーが中断したところから再開できるようにどこかに保存する必要があります。つまり、サーバー上の一時ファイル、メモリ キャッシュ、バックエンド データベースなど、アプリケーションに最適なストレージを選択する必要があります。

次のステップは、処理が一時停止したときにクライアントに通知することです。これはアトミックな操作であると想定されているため、Long Pollingと呼ばれる手法を使用して、サーバーへの接続を長時間維持し (ポーリングを減らす)、通知をより瞬時に感じさせることができます。または、定期的なポーリングを使用して、定期的に状態を照会することもできます。いずれにしても、クライアントがダイアログをスローするようにトリガーするのは、サーバーからの特定の応答です。

最後に、処理を続行する方法をサーバーに伝える必要があります。これは、サーバーが処理を続行するために知る必要があるすべての情報を持っているため、単純な API 呼び出しを介して行うことができます。

たとえば、このための API は次のようになります。

public void ConfirmProcessing(Guid processingInstanceId, bool cancel)
{
     var processingState = GetProcessingStateFromStorage(processingInstanceId);
     if (!cancel)
     {
         // resume processing
     }
     else
     {
         // discard processing
     }
}

確認のためにサーバーから通知を受け取ると、一意の ID (つまりprocessingInstanceId) が送信され、API を介して、続行/キャンセルなどの続行方法を示すフラグと共に送信されます。

于 2012-12-14T13:06:45.587 に答える