Wcf AccessViolationException和Faulting模块:是什么导致了此异常?是故障模块吗?

Wcf AccessViolationException和Faulting模块:是什么导致了此异常?是故障模块吗?,wcf,com,vb6,access-violation,sta,Wcf,Com,Vb6,Access Violation,Sta,如果发生AccessViolationException,那么与之相关的故障模块是否意味着它是该模块中的一个bug,在我们的例子中,它恰好是我们的第三方DLL之一?还是这个问题要复杂得多?我们已经联系了这个模块的制造商,但他们没有发现任何bug,只是暗示可能的堆栈损坏——这意味着什么。但是,根据事件日志,特定的故障模块始终与AccessViolationException关联。那么这件事的真相是什么?它是有缺陷的第三方DLL模块还是其他什么 背景 我们正在IIS 7上运行的.NET WCF we

如果发生AccessViolationException,那么与之相关的故障模块是否意味着它是该模块中的一个bug,在我们的例子中,它恰好是我们的第三方DLL之一?还是这个问题要复杂得多?我们已经联系了这个模块的制造商,但他们没有发现任何bug,只是暗示可能的堆栈损坏——这意味着什么。但是,根据事件日志,特定的故障模块始终与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/


感谢

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

在这两种情况下,最好的方法是防止这些STA线程终止,实现它们的池(或在单个STA线程上序列化),这样VB6运行时就不会在任何时候试图破坏它的内部结构(以及泄漏句柄/内存/TLS)


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

你能提供完整的例外情况吗?谢谢你的建议。如果我们使用静态COM对象,会有什么不同吗?目前我们一直在创建COM组件的新实例(受互斥锁保护).我已经读到,静态变量在线程终止期间不会被删除,它只会成为IIS回收的问题。