- - PR -
APS.NET 1.1にて2つの画面の処理を並列で行ないたい。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-21 10:07
いつもお世話になっております。現在、APS.NET 1.1(VB)で開発を行なっています。
その際、処理が遅い画面にて、「実行中です」と表示したいという要望が顧客よりあり、次の様な処理を考えていたのですが、2の別画面が3の処理が終了するまで起動しないため、うまくいきません。 ▼処理内容 1.ボタンを押す。 2.window.openで別画面起動(別画面は<meta http-equiv="Refresh" content="1;URL=xxxxx.aspx">にてリフレッシュ ) 3.サーバ側は続けて、処理を行なう。 ▼サンプルソース
▼処理の流れは下記の過去レスの内容と全く同じです。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28672&forum=7 すこし気になるのが、上記レスでjittaさんが「ASP.NET の構成ファイルで、プロジェクトがデバッグとなっていると、並列処理がされないと、どこかに書いてあった気がするんだけれど、探せない。。。」 という記述があることです。 1.並列処理は構成ファイルを変更しないとできないのでしょうか?またその場合どの値を変更すれば並列処理ができるのでしょうか? 2.上記のサンプルのような処理はできないのでしょうか? よろしくご教授お願い致します。 | ||||
|
投稿日時: 2007-02-21 17:12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=30440&forum=7&start=0
| ||||
|
投稿日時: 2007-02-21 18:10
todoさん返信ありがとうございます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=30440&forum=7&start=0 を読んでみたのですが、最終的に不可能ということなのですよね? なんらかの方法で、時間をかけずに簡単に逃げれる方法ってないのでしょうか? もし簡単な方法がないのでしたら、下のページを参考にして処理を行ないたいと思います。 http://blogs.wankuma.com/jitta/articles/19448.aspx よろしくご教授お願いいたします。 | ||||
|
投稿日時: 2007-02-21 18:52
別画面は必ず表示させないといけないですか?
処理をしている間に「処理中」の文字が画面にでていればいいだけなら、 「ASP.NETでいってみよう」という書籍にServer.Transferを使うことで それを実現する方法が書いてあります。 たしかTransferをつかって(URLが変わらない)「処理中」という画面を 表示させ、その画面のmetaタグで実際の長い処理を行うページを呼び出す といった方法だったかと。 詳しくは書籍を参照してください。 | ||||
|
投稿日時: 2007-02-21 19:04
popup_wait.aspxを別アプリにするとか。静的なページにするとか。 ただし、重い処理がブラウザ側もしくはサーバ側のタイムアウトを超える可能性があるのであれば、別の方法を考えるべきでしょう。 jittaさんのサンプルのように重い処理を別スレッドで動かすのがよいでしょう。 [ メッセージ編集済み 編集者: todo 編集日時 2007-02-21 19:05 ] | ||||
|
投稿日時: 2007-02-21 19:34
ちゃんと中身を読みましたか? 単に結論を見るだけではなくて、自分のしたいことと、どう関わってくるかを読み取らないと。 単に並列で動作しない、というだけの話なら、ポップアップの画面だけ セッションを無効にするなり、読み取り専用にするなり、単なる静的ページにするなり どうにでもできるでしょう。 | ||||
|
投稿日時: 2007-02-21 20:57
どっとねっとふぁんさん、todoさん、なちゃさん返信ありがとうございます。
todoさん、なちゃさんの言われる様に静的ページにしてみたら一応できました。 (※処理途中で子画面が閉じられたらとかいろいろ問題はありますが・・・) 1.ボタンを押す。 2.window.openで別画面起動(※別画面は静的ページ(html)とする。) 2-1 <meta http-equiv="Refresh" content="10">にて自分自身を再帰的に呼び出す。 2-2 javascriptのwindow.openerにて親画面の非表示テキストが"1"になったら子画面をクローズする。 3.サーバ側は続けて、処理が行なわれる。処理が終了したら非表示テキストに"1"を入れる。 どっとねっとふぁんさんの言われている方法は、まだ試していないのですが、「ASP.NETでいってみよう」という書籍を探してみて、調査したいと思います。 あと気になるのが、todoさんさんの言われている「ただし、重い処理がブラウザ側もしくはサーバ側のタイムアウトを超える可能性があるのであれば、別の方法を考えるべきでしょう」という部分です。 タイムアウトは設定を変更しなければIEの場合(今回対象ブラウザはIEのみです。)、60分のようなので問題ないかと考えているのですが、認識が間違っているでしょうか?よろしくご教授お願い致します。 | ||||
|
投稿日時: 2007-02-21 21:12
遅くなってごめんなさい。
まぁ、出てしまっていますが。 あと、全く勧められない方法ですが、Response.Write で、「ちょっと待ってね」「まだ待ってね」「もう少しだよ」「本当にあと少し」(くどい)とか、メッセージを出していく。。。 これがマイクロソフトのサイトに、サンプルとして載っているんだorz _________________ |