2016-10-31 6 views
3

この問題はさまざまなバリエーションで尋ねられていますが、.net(。async awaitなど)の新しい機能によって実現されています。ASP.NET Webフォームのロングプロセス - ブラウザのタイムアウト

長い実行タスクを持つC#.Net Web Formsアプリケーションがあります。タスクは、csvデータファイルをアップロードし、オブジェクトにシリアライズし、データベースにインポートするユーザーの要求を処理します。タスクは数分かかることがあり、ブラウザは定期的にタイムアウトします。これはユーザビリティの問題を引き起こします。

私は多くのソリューションを見てきましたが、ユーザーはデータをアップロードしてから、バックグラウンドでタスクを実行します。その後、ページはサーバーを断続的に呼び出してタスクのステータスを要求し、ユーザーに進行状況を通知します。

これはどのように達成されたのですか? IISまたはWindowsサービス: - どのようにこれがホストされている

  • Windowsサービス
  • Webサービス:私はテーブルの上に表示されるオプション?
  • 非同期、Await - これは可能性ですか?

答えて

1

私はあなたが2つの異なるアプローチをとることができると思います。

最初はプルアプローチで、サーバー内のユーザーごとのプロセス状態(セッション中)を維持し、プロセスがその状態を更新すると、クライアントは定期的にajax経由で実際の状態を取得できます。 ajax呼び出しはクライアントのブラウザから行われ、クライアントが表示しているのと同じWebページにその関数を置くことができます。そこからしか使用されない場合は、関数を分離する必要はありません。

もう1つはプッシュアプ​​ローチで、もう少し複雑ですが、他の可能性もあります。信号機https://www.asp.net/signalrのようなライブラリーを使用する必要があります。このライブラリーを使用すると、サーバーからクライアントのブラウザーに通信し、JS関数を呼び出し、更新された状態をクライアントのフォームにプッシュできます。これにより、より機能的な双方向コミュニケーションと、より複雑なやり方でより良いユーザーエクスペリエンスが生み出される可能性があります。

+0

コメントありがとうございます。私は実際にプロセスを実行することをどこで提案しますか?私が言ったように、私がAPPで直接行うと、スレッドが縛られ、ブラウザが完了するまでハングします。 – David

+0

新しいスレッドを開始してそのスレッドでプロセスを呼び出すと、メインスレッドはクライアントに戻り、新しいスレッドは処理中で状態を更新することになります。 –

+0

これらのプロセスを進行スレッドの更新を要求するために小さな間隔でプロセスへのajax呼び出しを行います。しかし、私は正しい技術を使用しているとは確信していません。私はこれまで何らかのサービスを利用していなければならないと考えていました。 – David

関連する問題