2013-08-28 84 views
1

背景: 我目前正在使用C#中的Dynamics AX 2009业务连接器。 对于我目前的项目,我需要连接到多个AOS服务器;理想情况下全部是并行的,尽管按顺序是足够的。我可以成功连接到一台服务器(任何服务器),但如果尝试连接到另一台服务器(甚至是同一台服务器,但使用null作为默认连接而不是指定名称),总是会打到LogonSystemChangedException。我甚至得到这个错误,如果我LogoffDispose前BC,设置变量引用它为空,让线程睡觉30秒,拨打GC.Collect()(抱歉 - 绝望的时间),然后创建一个全新的BC看另一个实例的AX一起在一个新的变量。这表明MS的代码在后台保留了一些静态对象,这些静态对象在整个流程生命周期中保持这些信息。Dynamics AX 2009业务连接器登录

找到解决途径:

为什么: 通过对实例的所有AOS服务器我用于连接到多个AOSes是我写它连接到一个给定的AX实例的CLR表函数,原因循环然后返回所有的列表客户&他们的SPIDS(只有当连接到该会话的AOS时才可见)。这是为了让我们的监控软件在我们看到数据库阻塞时返回有关AX用户会话的信息。

问: 有没有办法在同一进程内使用AX的.Net业务连接器(如果按顺序平行的是不可能的)连接到多个AOS?

回答

3

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

我所做的是开发一种针对AOS运行的服务,然后运行服务的三个实例,每个实例都将信息从AOS传送到SQL表,从而可以将所有信息整合到一起。

希望这会有所帮助。

1

既然你想要并行性,为什么不去子流程呢?

为实例的每个AOS服务器分配一个子进程,在相同的共享管道(或类似的)上收集答案,直到文件结束,然后等待子进程死亡,这应该是卓越的,因为他们有全部关闭输出。

Estavan按照陈述回答了您的问题。

+0

谢谢Jan - 这是我目前的想法。我提出了几个问题来探讨如何最好地解决这个问题。明天,我将开始阅读解决方案,以确定哪些最有意义。目前子流程比服务感觉更好,因为这允许在运行时定义参数,而不必提前配置服务。 – JohnLBevan