背景
我目前正在使用C#中的Dynamics AX 2009 Business Connector。
对于我目前的项目,我需要连接到多个AOS服务器;理想情况下,所有并行,但顺序是足够的。我可以成功连接到一台服务器(任何服务器),但如果我尝试连接到不同的服务器(甚至是同一台服务器,但使用LogonSystemChangedException
连接到默认设备,则总是点击null
由指定的名称)。如果我Logoff
和Dispose
之前的BC,我甚至会得到此错误,将引用它的变量设置为null,让线程休眠30秒,调用GC.Collect()
(抱歉 - 绝望的时候然后创建一个全新的BC,在一个新变量中完全查看AX的不同实例。这表明MS的代码在幕后有一些静态对象,这些对象在整个流程生命周期中都会持续存在。
找到建议的解决方案:
我在这里找到了一个使用LogonAs以及AOS实例的正确格式的建议修复:http://asonofmartha.blogspot.co.uk/2010/06/ax-net-business-connector-how-to-open.html - 但是没有运气试过这个。
到目前为止我唯一发现工作的是为第二个连接创建第二个进程 - 但这是一个令人不快的解决方案。
为什么: 我连接多个AOS的原因是我正在编写一个连接到给定AX实例的CLR表函数,循环遍历该实例上的所有AOS服务器,然后返回所有客户端的列表&他们的SPIDS(仅在连接到该会话的AOS时才可见)。这是为了让我们的监控软件在我们看到数据库阻塞时返回有关AX用户会话的信息。
问题: 有没有办法在同一过程中使用AX .Net Business Connector连接到多个AOS(顺序如果并行不可能)?
答案 0 :(得分:3)
前段时间我遇到了这个问题并没有得到解决方案。我通过我的雇主服务计划询问了MS,似乎.NET BC存储了某种连接数据的缓存,直到整个流程结束才会释放。这不打算改变,因为.NET BC将在下一个版本中完全弃用。
我所做的是开发一个针对AOS运行的服务,然后运行该服务的三个实例,每个实例都从AOS向SQL表中提取信息,在那里我可以获得所有合并的信息。
希望这有帮助。
答案 1 :(得分:1)
既然你想要并行性,为什么不去寻找子流程?
为实例的每个AOS服务器分叉一个子进程,在同一个共享管道(或类似管道)上收集答案,直到文件结束,然后等待子进程死亡,这应该是突出的,因为它们全部关闭输出。
Estavan已经回答了你提出的问题。