- PR -

Sleepについて

1
投稿者投稿内容
pika
会議室デビュー日: 2003/03/11
投稿数: 7
投稿日時: 2003-04-07 21:21
VB.NETでWEBフォームを作成しています。

WINDOWS 2000 Server
IIS 5.0
SQL SERVER 2000

メールを送信する機能を作成しています。
メールサーバの性能上、
1秒間隔でメールサーバに送信し、
50件送信すると5分の待ち状態にしています。
コードは、以下のように記述しています。

For i = 1 to 500
:
:
System.Threading.Thread.Sleep(300000)
Next

5分の待ち状態に入ってから2、3分くらい?に
 ページが表示できません。 HTTP 500 - 内部サーバー エラー
エラーが発生します。

IISの設定をいろいろ変えてはみたのですが(ASPのスクリプトタイムアウト等)、
解決できません。

解決策をご存知の方、ご教授お願いします。


[ メッセージ編集済み 編集者: pika 編集日時 2003-04-07 21:22 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-08 10:40
こんにちは。
引用:

pikaさんの書き込み (2003-04-07 21:21) より:

メールサーバの性能上、
1秒間隔でメールサーバに送信し、
50件送信すると5分の待ち状態にしています。


 あの、500件のメールを送るということは、1sec * 500件 + (500件 / 50件) * 300sec = 3500sec→約1時間 ということですか?私の思い違いの可能性も大きいですが、ASPのワーカプロセスって、シングルで動いているように思います(デバッグ中に他の人から、「止めてます?」聞かれた)。
 スレッドを分けるか、別プロセスをたてて、応答はさっさと返してしまい、エラーが発生したときは管理者のメールアドレスにエラーメッセージをメール送信するというようなことはできないのでしょうか。
ant
ベテラン
会議室デビュー日: 2002/07/11
投稿数: 51
投稿日時: 2003-04-08 11:42
エラーが出るとメールの送信も止まるんですか?
クライアント側で、サーバからの応答がないからタイムアウトしてるだけのような気がしますが・・・
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-08 17:40
はじめまして。

エラーの現象についてですが、
コントロールパネルからイベントビューアを起動し、
アプリケーションログにエラーが出力されていないか
確認してみてください。

以下のエラー内容が出力されているようであれば、
machine.config の <processModel>要素 内にある
responseDeadlockInterval で設定された値のため
である可能性が大です。(規定値は3分)


エラー内容:「デッドロック状態である可能性があるため、
aspnet_wp.exe (PID: xxxx) が繰り返されました。」
pika
会議室デビュー日: 2003/03/11
投稿数: 7
投稿日時: 2003-04-08 20:30
Jittaさん、ともさん、Qooさん

貴重なお時間を割いてご返答いただきましてありがとうございました。

それで質問していたコード内容に大誤りがありました。
大変申し訳ありませんでした。

(誤)
For i = 1 to 500
:
:
System.Threading.Thread.Sleep(300000)
Next

(正)
' 送信カウント
SecdCnt += 1
'50通毎に5分待つ
If i = 50 Then
System.Threading.Thread.Sleep(300000)
i = 1
Else
i += 1
End If

それでみなさんのご解答を元に調査したところ、
Qooさんにご教授いただいた内容がドンピシャでした。
早速、mashine.configを修正して試したところ、
全員分送信することができました。

皆さん、本当にありがとうございました。
今回、VB.NETは初めて経験したので、
まだまだわからない事がまだまだあると思いますが、
今後ともご教授いただきますよう、
よろしくお願い致します。

1

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