TKMPの例外 |
- 日時: 2010/07/28 11:48
- 名前: ぼん
- TKMPを使用していると、時々下記のような例外が発生します。(アプリケーションはクラッシュします)
TKMPのクラスを使用する部分は全て Try TKMP do something... Catch ex As Exception End Try のようにしています。
どのように対処すればよいのでしょうか?
環境は、 OS:windows XP SP3 TKMP.dll:2.4.19.2 言語:Visual Basic 2010 Express です。
以下、イベントビューワーからの抜粋です。 イベントの種類: エラー イベント ソース: .NET Runtime イベント カテゴリ: なし イベント ID: 1026 フレームワークのバージョン: v4.0.30319 説明: ハンドルされない例外のため、プロセスが中止されました。 例外情報: TKMP.Net. スタック: 場所 TKMP.Pop.Command. . (System.String, System.String) 場所 TKMP.Pop.Command.(=. () 場所 TKMP.Pop.Command. . (System.IO.Stream, Int32) 場所 TKMP.Pop. .)() 場所 System.Threading.ThreadHelper.ThreadStart_Context(System.Object) 場所 System.Threading.ExecutionContext.runTryCode(System.Object) 場所 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object) 場所 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 場所 System.Threading.ThreadHelper.ThreadStart()
|
|
Re: TKMPの例外 ( No.1 ) |
- 日時: 2010/07/31 01:17
- 名前: Toki◆pRU.c9X.EOI
- 例外はライブラリ内のスレッドで行っている受信処理時の
通信タイムアウトを示していました。 このため、try〜では例外を捕捉出来ません。
通信タイムアウトの時間を多めにしてみてください。
アプリケーションはクラッシュはライブラリとして問題があるので、 修正したいと思います。
|
Re: TKMPの例外 ( No.2 ) |
- 日時: 2010/08/04 12:57
- 名前: ぼん
- 回答ありがとうございます。
以下のように修正してみました。
'POPクライアントクラスの定義 PopClient = New TKMP.Net.PopClient(bp, pop_server, Port) ' タイムアウトインターバルの設定(デフォルトは20秒) PopClient.TimeOutInterval = 60
かならず、例外が発生するというわけではないので、しばらくこれでテストしてみます。
※ この値の最適値はいくつになるのでしょうか?
|
Re: TKMPの例外 ( No.3 ) |
- 日時: 2010/08/20 14:06
- 名前: ぼん
- 修正した後のテスト結果の報告です。
PopClient.TimeOutInterval = 60 では、例外が発生しなくなるレベルまでにはなりませんでした。 (頻度は半分くらいになっているので、確かに効果はあるようなのですが)
PopClient.TimeOutInterval = 180 として、再度テストしてみます。
|
Re: TKMPの例外 ( No.4 ) |
- 日時: 2012/06/01 16:37
- 名前: ぼん
- 例外は発生しなくなったのですがアプリケーションが暴走するようになりました。
(タスクマネージャーで「応答なし」になり、そのままの状態です) GMailでSSL接続しているのですが、なかなか原因がつかめませんでした。
最終的には、TKMPをやめて自作したのですがSystem.Net.Security.SslStreamクラスのread()時に connectionが閉じられてしまっている場合が発生しているようです。 (これはタイムアウトの指定をすることで、例外を検出できました) TKMPでもタイムアウトの指定ができるので同様に例外を検出できると思い込んでいました。
以下、自作ソースの抜粋です。
client = New System.Net.Sockets.TcpClient client.Connect(server, port) client.ReceiveTimeout = 60 * 1000 client.SendTimeout = 10 * 1000 ' 通信開始(SSL有り) stream = New System.Net.Security.SslStream(client.GetStream()) .... Try Do ReDim buff(buff_size+1) l = stream.Read(buff, 0, buff_size) ..... Loop While (.....) Catch ex As Exception End Try
現在は、これで対応しています。 暴走するのも収まっています。
|
|
|