1

背景: 我目前正在使用 C# 中的 Dynamics AX 2009 Business Connector。对于我当前的项目,我需要连接到多个 AOS 服务器;理想情况下所有并行,尽管顺序就足够了。我可以成功连接到一台服务器(任何服务器),但LogonSystemChangedException如果我尝试连接到另一台服务器(甚至是同一台服务器,但使用null默认连接而不是指定名称),总是会点击。如果我LogoffDispose之前的 BC,我什至会得到这个错误,将引用它的变量设置为 null,让线程休眠 30 秒,调用GC.Collect()(对不起 - 绝望的时候)然后创建一个全新的 BC,在一个新变量中完全查看 AX 的不同实例。这表明 MS 的代码在幕后有一些静态对象,这些对象在整个进程生命周期中保留了这些信息。

找到建议的解决方案:

原因: 我连接到多个 AOS 的原因是我正在编写一个 CLR 表函数,它连接到给定的 AX 实例,遍历该实例上的所有 AOS 服务器,然后返回所有客户端及其 SPIDS 的列表(仅在连接到该会话的 AOS)。这是为了让我们的监控软件在我们看到数据库阻塞时返回有关 AX 用户会话的信息。

问题: 有没有办法在同一进程中使用 AX .Net Business Connector 连接到多个 AOS(如果无法并行,则依次连接)?

4

2 回答 2

3

前段时间我遇到了这个问题并且没有得到解决方案。我通过我的雇主服务计划询问了 MS,似乎 .NET BC 存储了某种连接数据的缓存,直到整个过程结束才释放。这不打算改变,因为 .NET BC 将在下一个版本中完全弃用。

我所做的是开发一个针对 AOS 运行的服务,然后运行该服务的三个实例,每个实例都将信息从 AOS 收集到一个 SQL 表,在那里我可以整合所有信息。

希望这可以帮助。

于 2013-08-28T20:06:53.783 回答
1

既然您无论如何都想要并行性,为什么不选择子流程呢?

为实例的每个 AOS 服务器分叉一个子进程,在同一个共享管道(或类似管道)上收集答案,直到文件结束,然后等待子进程死亡,这应该是突出的,因为它们都关闭了输出.

如前所述,Estavan 已回答您的问题。

于 2013-08-29T11:33:28.490 回答