我有一个dotnet进程,通过调用非托管dll与Java进程进行通信。
在某些情况下,Java进程似乎崩溃并使用我的dotnet进程。没有例外,流程就此消失。崩溃后,java正在创建一个名为“hs_err_pid3228”等的日志文件。
没有收到提供非托管dll和java进程的供应商的任何满意度,我减少了尝试缓解问题,这需要确保调用java进程,如果它们崩溃,不要采取我的过程。
阅读过各种文章之后,appdomains似乎很有可能被使用 - 我的理论是我可以通过一些工作将我的功能分开调用java进程并在一个单独的appdomain中运行它,如果不是抓住appdomain关闭,至少检测到它已经发生并重新启动该功能。
有没有人有类似的问题?对于那些有更多appdomain经验的人来说,这种方法是否合理?
为了让它变得更有趣,Java崩溃不是真正可重复的 - 它似乎非常随机,我仍然在与我将如何分离到appdomain中进行测试
答案 0 :(得分:1)
这是对AppDomains的合理使用,您的建议将起作用。
与此类似,我曾经使用AppDomains创建一个单独的应用程序,该应用程序为了异常报告目的而自行崩溃。应用程序自动启动,创建了一个新的AppDomain,然后在新的AppDomain中重新执行,然后检测到它在AppDomain中运行并正常执行。当该AppDomain发生异常时,会通知原始进程,它会断开子域报告给用户发生错误,询问是否要报告,然后自行选择并重新尝试。
编辑:为了给你一个头脑,如果你想查看该项目的Program.cs,我在这里上传了一个精简版。 (这很长,所以我不认为我应该在这里发布。)
答案 1 :(得分:0)
是的,利用AppDomains在这里很有意义。
我最近重新设计了我的Windows服务,将其各种WCF服务加载为在自己的AppDomain中运行的插件。我在bootstrapping过程中遇到了一些情况,我正在使用MarshalByRefObject对象来启动和运行,但是一旦加载了插件,使用WCF就可以非常轻松地在AppDomains之间进行通信。