如何确定当前的Biztalk主机进程

时间:2020-03-06 14:46:26  来源:igfitidea点击:

我想在运行时知道我当前的代码正在执行几个可能的主机进程中的哪个。主机进程已在Biztalk管理级别配置了名称,但是我需要从代码内部知道我所处的进程。

我没有找到任何受支持的方法来执行此操作,我甚至被困在寻找不受支持的方法的过程中:-)

编辑:感谢tomasr的答案。我主要需要出于日志记录/跟踪目的。不仅要显示正在运行ode的主机,还要确定适当的跟踪级别。

这也意味着,我需要深入了解库级别,并且必须快速。例如,我无法获取调用堆栈来找出代码在哪个顶级组件(编排,管道等)中运行。

另一方面,我可以在单例构造函数中弄清楚一次。每个AppDomain都会调用一次,因此可能需要一些时间来查找内容。但是我那里可能没有一个非常有意义的调用堆栈,因此我们回到了第一个方格:-/

Edit2:Biztalk管理数据库必须包含我需要的信息。它知道哪些主机在哪个服务器上启动,以及(可能)这些主机进程的进程ID。如果有人在我可以开始寻找的地方有了指针,那也会对我有帮助。

解决方案

据我所知,没有任何"简单"的方法可以做到这一点。获取该信息的一种方法(有些倒退)是使用ExplorerOM API查询管理配置数据,并确定执行的位置和运行的主机/处理程序。

例如,如果我们通过PipelineComponent进行此操作,则可以在消息上下文中查找端口名称,然后使用ExplorerOM查找它。然后,使用它查询与适配器关联的处理程序,然后从中获取主机名。对于业务流程,它会类似,尽管我们会寻找业务流程的完整名称。

出于好奇,我们为什么需要此信息?