在这种情况下,appdomains可能会有所帮助吗?

时间:2009-09-18 03:12:05

标签: java .net appdomain

我有一个dotnet进程,通过调用非托管dll与Java进程进行通信。

在某些情况下,Java进程似乎崩溃并使用我的dotnet进程。没有例外,流程就此消失。崩溃后,java正在创建一个名为“hs_err_pid3228”等的日志文件。

没有收到提供非托管dll和java进程的供应商的任何满意度,我减少了尝试缓解问题,这需要确保调用java进程,如果它们崩溃,不要采取我的过程。

阅读过各种文章之后,appdomains似乎很有可能被使用 - 我的理论是我可以通过一些工作将我的功能分开调用java进程并在一个单独的appdomain中运行它,如果不是抓住appdomain关闭,至少检测到它已经发生并重新启动该功能。

有没有人有类似的问题?对于那些有更多appdomain经验的人来说,这种方法是否合理?

为了让它变得更有趣,Java崩溃不是真正可重复的 - 它似乎非常随机,我仍然在与我将如何分离到appdomain中进行测试

2 个答案:

答案 0 :(得分:1)

这是对AppDomains的合理使用,您的建议将起作用。

与此类似,我曾经使用AppDomains创建一个单独的应用程序,该应用程序为了异常报告目的而自行崩溃。应用程序自动启动,创建了一个新的AppDomain,然后在新的AppDomain中重新执行,然后检测到它在AppDomain中运行并正常执行。当该AppDomain发生异常时,会通知原始进程,它会断开子域报告给用户发生错误,询问是否要报告,然后自行选择并重新尝试。

编辑:为了给你一个头脑,如果你想查看该项目的Program.cs,我在这里上传了一个精简版。 (这很长,所以我不认为我应该在这里发布。)

答案 1 :(得分:0)

是的,利用AppDomains在这里很有意义。

我最近重新设计了我的Windows服务,将其各种WCF服务加载为在自己的AppDomain中运行的插件。我在bootstrapping过程中遇到了一些情况,我正在使用MarshalByRefObject对象来启动和运行,但是一旦加载了插件,使用WCF就可以非常轻松地在AppDomains之间进行通信。