我们有一个不时发生的问题。我们有一个 Web 服务器和一个应用程序服务器。我们的应用服务器包含我们的业务逻辑代码,它作为 COM+ 服务器和库应用程序安装。然后,我们在 Web 服务器上放置一个代理,以强制从 Web 服务器到 COM+ 服务器的所有调用。几乎 100% 的时间一切都正常运行。每一次,一个蓝月亮,当然,只有在生产机器上,这个问题才会让人头疼。下面是我们通过企业库记录的事件日志条目。
它开始记录此事件日志:
Type : System.InvalidCastException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Unable to cast object of type 'System.__ComObject' to type 'System.EnterpriseServices.IRemoteDispatch'.
Source : System.EnterpriseServices
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : System.Runtime.Remoting.Messaging.IMessage Invoke(System.Runtime.Remoting.Messaging.IMessage)
Stack Trace : at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
然后在稍后的请求之后记录此事件日志。
Type : System.InvalidCastException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Unable to cast COM object of type 'System.__ComObject' to interface type 'System.EnterpriseServices.IRemoteDispatch'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{6619A740-8154-43BE-A186-0319578E02DB}' failed due to the following error: The remote procedure call failed. (Exception from HRESULT: 0x800706BE).
Source : System.EnterpriseServices
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : System.Runtime.Remoting.Messaging.IMessage Invoke(System.Runtime.Remoting.Messaging.IMessage)
Stack Trace : at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
堆栈跟踪走得更远一点,但这没关系。基本上在它应该从 Web 服务器跳转到 COM+ 服务器时发生。
我们可以通过在 COM+ Server 上重新启动 COM+ Server 应用程序来解决这个问题,但这对我来说还不够好……我本质上是一个修复者。
这些错误并不完全清楚地说明正在发生的事情。谁能阐明这些错误的含义以及如何避免出现这些错误?
通常情况下,我永远不会发这样的帖子。我想我遇到的问题是正在发生的异常的模糊不清。搜索为什么会发生这种情况会产生很少的结果。