AccessViolationException和Faulting模块:导致此异常的原因是什么?它是故障模块吗?

时间:2012-09-12 19:36:36

标签: wcf com vb6 access-violation sta

如果发生AccessViolationException,与它相关的错误模块是否意味着它是该模块中的错误,在我们的例子中恰好是我们的第三方DLL之一?或者这是一个更复杂的问题?我们已经联系了这个模块的制造商,但他们没有发现任何错误,只是建议可能的堆栈损坏,这意味着什么。但是,根据事件日志,特定的错误模块始终与AccessViolationException关联。那么这是真的呢?它是一个有缺陷的第三方DLL模块还是其他什么东西?

背景

我们在IIS 7上运行的.NET WCF Web服务中使用受互斥锁保护的VB6 STA COM对象。最近我们检测到随机的System.AccessViolationException错误(由此对象引起)完全崩溃Web服务,我们'因为我们已经完成了使这个COM对象与Web服务一起工作的所有事情,所以此刻非常无助。服务本身已设置为使用以下指南在STA模式下运行:(http://scottseely.com/2009/07/17/calling-an-sta-com-object-from-a-wcf-operation/ < / p>

谢谢

1 个答案:

答案 0 :(得分:0)

这可能与线程终止时VB6运行时泄漏有关。 VB6 ActiveX DLL项目具有“无人值守执行”和“保留在内存中”的选项,试图通过尽可能长时间地保持STA线程上的运行时来缓解这些问题。询问您的供应商这些选项是否适用于他们的组件。

在任何一种情况下,最好的方法是保持那些STA线程不会终止,实现它们的池(或在单个STA线程上序列化),这样VB6运行时就不会试图拆掉它的内部结构。时间(以及泄漏处理/内存/ TLS)。

在COM + / MTS下搜索使用VB6组件,可能会找到有价值的建议。祝你好运!