エラー発生せず、突然受信しなくなります
日時: 2012/08/17 09:37
名前: 山田充
<slater0911@gmail.com >
TKMPのDLLを使用して、1分間隔でメールサーバーと通信を行っています。 不定期ですが、大体3日ほど経過すると、それまで正常にメールサーバーとの通信を行っていたのに、ダンマリ状態になってしまいます。 各処理のログを残すようにしているのですが、"証明書に成功しました"まで記録されており、 次の処理のConnect()に移行されていない(Connectの成功有無にかかわらずログを残そうとしていますが、まったくログに残らない状態)ような感じです。 どなたか同様の現象の回避方法を教えて頂けないでしょうか? メールサーバーはGmailを使用しており、PCは仮想XP上でVisual Stadio2008のVer3.5を使用しています。 /// <summary> /// 60sec間隔でPOP受信 /// </summary> private void timer_PopReceive_Tick(object sender, EventArgs e) { //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "タイマーが開始されました"); //1分間隔でモニターする timer_PopReceive.Interval = 60000; //PopReceive()処理が完了するまでタイマーを無効 timer_PopReceive.Enabled = false; //Mail受信 PopReceive(); } /// <summary> /// Mial受信からの一連の流れ /// </summary> public void PopReceive() { //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "Mail受信処理が開始しました"); //サーバー接続用クラスを作成 TKMP.Net.IPopLogon logon = new TKMP.Net.BasicPopLogon(pop_userid, pop_pass); TKMP.Net.PopClient pop = new TKMP.Net.PopClient(logon, pop_server, pop_port); //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "ログオンに成功しました"); try { //SSL使用 pop.AuthenticationProtocol = TKMP.Net.AuthenticationProtocols.SSL; //証明書に問題があった場合に独自の処理を追加 pop.CertificateValidation += new TKMP.Net.CertificateValidationHandler(pop_CertificationValidation); //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "証明書に成功しました"); } catch (Exception ex) { //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "(Error): 証明書に失敗しました" + ex.Message); } //接続開始 try { if (!pop.Connect()) { eventLog.Set_EventLog(DateTime.Now, "(Error): POPサーバーとの通信確立に失敗しました"); //MessageBox.Show("POPサーバーとの接続に失敗しました。POPサーバーと再接続して下さい。", "接続失敗"); //失敗した場合は、タイマーを有効にし、リトライさせる timer_PopReceive.Enabled = true; return; } else { pictureBox_Status.ImageLocation = imageStatus_start; //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "POPサーバーと通信が確立されました"); } } catch (Exception ex) { eventLog.Set_EventLog(DateTime.Now, "(Error): POPサーバーとの接続に失敗しました (例外内容) " + ex.Message); //MessageBox.Show(ex.Message, "POPサーバー接続エラー"); //失敗した場合は、タイマーを有効にし、リトライさせる timer_PopReceive.Enabled = true; return; }
Re: エラー発生せず、突然受信しなくなります ( No.1 )
日時: 2012/08/17 13:36名前: Toki◆pRU.c9X.EOI
pop.CertificateValidation += new TKMP.Net.CertificateValidationHandler(pop_CertificationValidation); //デバッグ用 eventLog.Set_EventLog(DateTime.Now, "証明書に成功しました"); 直後でログを取っていますが、この部分では証明書処理の定義をしているだけなので、 処理自体はまだ何も行われていません。つまり必ず成功するか失敗するかです。 Connect()メソッドの実行時の「ダンマリ」は 開発環境で調査可能でしょうか? プログラムが強制終了するのでなければネットワーク関連の問題のような気がします。 仮想環境が状況を複雑にしているような木がするので、もう少しシンプルな環境で試すと何かわかるかもしれません なんとなくですが、1分間隔で3日だと約4000回ほどなので NATテーブルが枯渇しているような気もします。
Re: エラー発生せず、突然受信しなくなります ( No.2 )
日時: 2012/08/17 14:00名前: 山田充
ご返信ありがとうございます。 仮想環境下ではなく、Win7の環境でなら、確認が可能なのでやってみます。 現状Connect()メソッドを実行した際に、ネットワークの問題なのか値が戻ってこない為、 ダンマリになっている可能性が高いようなので、そのような状況の際には、間隔をあけて再度 Connectするような処理を入れたいですが、方法が思いつきません。
Re: エラー発生せず、突然受信しなくなります ( No.3 )
日時: 2012/08/17 15:47名前: 山田充
Toki◆pRU.c9X.EOIさん 気になることがあるので、追記させてもらいます。 TimeOutIntervalがデフォルトで20秒設定になっているのですが、Connect()メソッドを実行してサーバーからの返答が20秒を超えてもTKMPではエラーにならないのでしょうか? 少しでも解決の糸口がほしいため、教えて頂けないでしょうか?
Re: エラー発生せず、突然受信しなくなります ( No.4 )
日時: 2012/08/22 07:30名前: Toki◆pRU.c9X.EOI
Connect()メソッドでの接続処理で応答無しとなる場合があるか確認してみます。
Re: エラー発生せず、突然受信しなくなります ( No.5 )
日時: 2012/08/30 17:18名前: 山田充 <slater0911@gmail.com >
Toki◆pRU.c9X.EOIさん Win7の環境で約1週間ほど動作確認をしましたが、再現が無くなりました。 理由はよく分かりませんが、このまま使用予定です。