- PR -

ASP.NETの2重起動

投稿者投稿内容
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2004-01-15 20:24
いつも参考にさせていただいてます。
現在、ASP.NETで開発を行っています。
実現したいことはASP.NETからExcelファイルを生成しデータを編集し、保存する
という流れです。
1つのPCだけで行うとうまくいくのですが
複数PCで同時に処理を行うと、
ごくたまにですが片方はデータが出るのにもう片方は1部分データが印字されて
いない場合があります。
プログラムの中ではなるべくモジュールは使わないようにして組んであるのですが
どうしても原因がわかりません。EXCELに編集する方式は
データベースから取得したデータを直接、EXCELのセルに埋め込んでいくという方法です。
どなたかご存知の方、ご教授願います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-15 21:00
あれれ?まだ解決していなかったのですか?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7155&forum=7

 クライアントに返すとき、いったん保存していませんか?その保存するファイル名が、重なったりしていませんか?
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2004-01-15 22:10
Jittaさん返答ありがとうございます。前のはPASTEの時にうまく編集の切り分けが出来て
いなかったからです。
まえのはとりあえず、何度か実験をしてみて複数でも大丈夫そうになったのですが
今回のEXCEL編集は直接セルに埋め込むものなのでユーザー毎に切り分けさえ出来ていれば
出来るはずなのですが・・・


Jittaさんの引用---------------------------------------------

クライアントに返すとき、いったん保存していませんか?
その保存するファイル名が、重なったりしていませんか?

--------------------------------------------------------------

保存はしてます。でもそれぞれファイルパスまで指定してあげているので
重なる要素は無いように思えるのですが・・・
ユーザー毎にEXCEL出力する場所が違うので保存先が重なることもないと思うのですが・・・



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-16 08:56
 う〜ん??では、Excelのインスタンスをクラス変数に取っているとか。

Class Webアプリ
Private Shared objExcel As Excel.Application
...
End Class

なんてことをしていると、Moduleを使わなくてもアプリケーション共通の変数になります。

 その他、考えられるところは、newせずに今あるインスタンスを捕まえようとしているとか、そもそもデータがない(ロックされていてとれなかった、など)とか。


> ユーザー毎にEXCEL出力する場所が違う
ん?本当に?どこから「ユーザ」を持ってきています?
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2004-01-16 09:21
Jittaさん返答ありがとうございます。
ユーザーはWeb画面からログインする際にログインデータをクッキーに保存して出力する際は
そのログイン毎のフォルダに
EXCELを保存してあげる、という感じです。
Jittaさんの引用----------------------------------------------------

Class Webアプリ
Private Shared objExcel As Excel.Application
...
End Class

なんてことをしていると、Moduleを使わなくてもアプリケーション共通の変数になります。


------------------------------------------------------------------
EXCEL処理をクラス変数にとっています。
でもClassにしないと後でEXCEL.exeが残ってしまうような気がしたのですが・・・
前に過去のスレッドを見た時にEXCEL使ったCLASSをNothingしてあげないと
EXCEL.exeが残ってしまうと書いてあったような気がするのですが・・


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-16 13:31
引用:

ななさんの書き込み (2004-01-16 09:21) より:

でもClassにしないと後でEXCEL.exeが残ってしまうような気がしたのですが・・・
前に過去のスレッドを見た時にEXCEL使ったCLASSをNothingしてあげないと
EXCEL.exeが残ってしまうと書いてあったような気がするのですが・・


 すみません、それは誤解です。Marshalクラスできちんとリリースして、ガベージコレクトしてやると、終了してくれます。

 で、「アプリケーションで共通」になるのは、Sharedを付けたときで、これを付けていないなら、大丈夫です。

 同時に2つ以上実行は、私の方でもやっているので、どこかで共通のインスタンスを使っていなければ大丈夫とは思うんですが。。。
 一度、小さなテストプロジェクトを作って試してみませんか?
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2004-01-16 14:13
Jittaさん返答ありがとうございます。
共通のインスタンスは全て取り払ったのでその点は大丈夫なはずです。
なので小さいプログラムを作って実験してみるつもりです。
あと一つ気になる点があるのですが

Jittaさんの引用------------------------------------------------------

そもそもデータがない(ロックされていてとれなかった、など)とか。

--------------------------------------------------------------------

初歩的な質問で申し訳ありませんがロックをしているとデータは見れないのですか?
でも同時に2つのコンピュータで実行した場合、それは特に関係ないですよね??
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-16 22:52
引用:

ななさんの書き込み (2004-01-16 14:13) より:

初歩的な質問で申し訳ありませんがロックをしているとデータは見れないのですか?
でも同時に2つのコンピュータで実行した場合、それは特に関係ないですよね??


 これは、データベースの作りとか、どのようなロックをかけるかで異なります。たとえばOracleなら、コミットするまで待たせたり、更新前のデータを読ませたりできます。
#「シリアル化」でエラーってのは、この辺が絡んでいますね。

 で、2つのコンピュータが同時なので、関係してきます。どのようなSQLを発行しているか、ということが関係します。

スキルアップ/キャリアアップ(JOB@IT)