2011-11-08 6 views
2

私は、リモートサーバーとのTCP接続を維持し、通信プロトコルを管理するサードパーティのライブラリを使用しています。接続が失われることもあるので、接続状態を監視して再接続を試みるスレッドがあります。通常は再接続できます。AppDomainは悪いサードパーティライブラリをラップするのに適していますか?

問題は、Connect()への呼び出しが返されないことがあります。私はそれがうまくいくプロセスを再開するので、デッドロックか静的な変数のどちらかが奇妙な状態になってしまって、ライブラリ内で何か奇妙なことが起こっていると思います。私はコードを逆コンパイルしましたが、わかりやすいように少し "創造的"です。

このサードパーティライブラリのアカウントでプロセスを再起動する必要がないように、これを記述する必要があります。ライブラリ自体には、Action{T}という2つのコールバックがあります。独自のアプリドメイン内でライブラリを実行するのが良い選択ですか?この方法は、接続がダウンして再起動しない場合、私はappdomainを殺すことができ、新しいものを開始することができます。私はどんな考察をするべきですか?

答えて

2

ハングスレッドは非常に問題があります。彼らはいつも、何らかの種類のネイティブコール、Thread.Abort()が到達できないものにハングアップします。スレッドを中止できない場合、AppDomainをアンロードしようとすると機能しません。

別のプロセスでコードを実行する方が良い解決策です.Process.Kill()でプロセスをいつでも撃つことができます。 WCFのようなものでそれに話してください。

+0

+1 - 不正な第三者コードから自分自身を守る唯一の方法は代理プロセスです。 –

0

明らかに、これが実際に問題を解決しているかどうかを確認する必要があります。それがあれば、それはまともな仕事です。サードパーティのライブラリがすべて管理されている場合、あなたの回避策はうまくいくと思います。

この問題の解決に役立つプログラムはありません。可能であれば、図書館の開発者に連絡するか、他の場所で類似の図書館を探すことができます。実行可能な回避策がある場合は、これらのことをすべて実行する方がよいでしょう。

関連する問題