2011-11-08 27 views
2

我正在使用維護與遠程服務器的TCP連接並管理通信協議的第三方庫。有時它會失去連接,所以我有一個線程監視連接狀態並嘗試重新連接。通常它可以重新連接。AppDomain是一個包裝壞的第三方庫的好方法嗎?

問題是有時調用Connect()永遠不會返回。我重新啓動它將會工作的過程,所以我認爲庫中發生了一些愚蠢的事情,無論是死鎖還是某個靜態變量被置於一個奇怪的狀態。我對代碼進行了反編譯,但它有點「創造性」,可以理解。

我需要以某種方式編寫此文件,以便我不必因此第三方庫而重新啓動進程。圖書館本身有2個回調Action{T}。在自己的應用程序域中運行庫是一個不錯的選擇?這樣,如果連接斷開並且不會重新啓動,我可以殺死appdomain並啓動一個新的。我應該考慮什麼?

回答

2

懸掛線程非常成問題。它們總是掛在某種本地電話上,一種是Thread.Abort()無法達到的。當線程無法中止時,嘗試卸載AppDomain將不起作用。

然後在單獨的過程中運行代碼是更好的解決方案,您可以隨時使用Process.Kill()拍攝過程。與WCF等人討論。

+0

+1 - 保護自己免受不良第三方代碼的唯一方式是代理過程。 –

0

好吧,顯然你需要檢查這是否真的解決了這個問題。如果是這樣,這是一個體面的工作。如果第三方庫全部處理完畢,我相信您的解決方法將起作用。

我不認爲你還有什麼可以編程來幫助解決這個問題。你可以聯繫圖書館的開發者,或者在其他地方尋找類似的圖書館,如果可能的話。當你有一個可行的解決方法時,最好做所有這些事情。