2009-09-18 77 views
2

我有一個dotnet進程,通過調用一個非託管DLL正在與Java進程進行通信。這可能是appdomains在這種情況下會有所幫助嗎?

在某些情況下,Java進程似乎崩潰,並使我的dotnet進程下降。沒有例外情況發生,這個過程就會消失。在崩潰時,java正在創建一個名稱爲「hs_err_pid3228」等的日誌文件。

沒有從提供非託管dll和java進程的供應商那裏收到任何滿足感,我試圖減輕這個問題將需要確保調用java進程,如果他們崩潰,不要把我的過程。

閱讀了各種文章,appdomains似乎是一個可能的候選人使用 - 我的理論是我可以與一些工作分開我的功能,調用java進程,並運行它在一個單獨的appdomain,這將有望讓我如果沒有趕上appdomain下降,至少檢測到它已經發生並重新啓動該功能。

有沒有人有類似的問題?這種方法對於那些擁有更多appdomain體驗的人來說似乎是合理的嗎?

爲了使它更有趣,Java的崩潰是不是真的重現性 - 它似乎很隨意,我仍然有我如何去測試分離到的AppDomain

回答

1

這是一個合理的作戰AppDomain的使用,以及您提出的建議將會起作用。

以類似的方式,我曾經使用AppDomains創建了一個單獨的應用程序,該應用程序爲了異常報告的目的而查看本身崩潰。應用程序自行啓動,創建一個新的AppDomain,然後在新的AppDomain中重新執行,然後檢測到它在AppDomain中運行並正常執行。當該AppDomain發生異常時,會通知原始進程,並向用戶發送錯誤發生的子域報告,詢問他們是否要報告,然後自行調整並重新嘗試。

編輯:爲了給你一個領先地位,如果你想看看Program.cs的該項目, 我在這裏 上傳一個精簡版。 (這很長,所以我不認爲我應該在這裏發佈。)

+0

謝謝 - 這是至少值得一試的。現在我只需要說服管理層把時間分配給我,至少可以證明一個概念。 – user50380 2009-09-23 23:42:25

0

是的,利用AppDomains在這裏有很多意義。

我最近重新編寫了Windows服務,將它的各種WCF服務加載爲在其自己的AppDomain中運行的插件。我在引導過程中遇到了一些使用MarshalByRefObject對象來啓動和運行的案例,但是一旦加載了插件,使用WCF的AppDomain之間的通信就非常容易。

相關問題