1

時々発生する問題があります。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+ サーバー上で COM+ サーバー アプリケーションを再起動することで解決できますが、私にとっては十分な解決策ではありません.

これらのエラーは、何が起こっているのかを明確に示しているわけではありません。これらのエラーの意味と、これらのエラーの発生を潜在的に回避する方法について、誰かが光を当てることができますか?

通常、私はこのような投稿をすることはありません。私が抱えている問題は、発生している例外の曖昧さにあると思います。なぜこれが起こっているのかを検索しても、ほとんど結果が得られません。

4

2 に答える 2

1

ハードウェア Web サーバー & アプリケーション サーバー & それらの間のファイアウォールでタイムアウトが発生しました。ファイアウォールのタイムアウトは、アプリケーション サーバーのデフォルトのタイムアウトよりも短かった。この問題を解決するために必要だったのは、アプリケーション サーバーのレジストリに次のレジストリ キーを配置することだけでした (最初から存在しませんでした)。

レジストリ キーを作成します: "My Computer\HKey_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\KeepAliveTime". 16 進値 300000 の DWORD エントリを作成します。

これにより、Application Server のタイムアウトがファイアウォールのタイムアウトと一致するように増加しました。

于 2010-12-22T20:09:22.590 に答える
0

私が認識できることから、2 番目のメッセージは、リモート プロシージャ コールが失敗したことを示しています。これは、QueryInterface の呼び出しが失敗したことを意味します。これは、ネットワークの中断、ハングなどの COM+ サーバーの障害、タイムアウト、またはその他の問題が原因である可能性があります。呼び出しの繰り返しが (何も変更せずに) 機能する場合、何らかのハングまたはタイムアウトが発生しています。その後の呼び出しの繰り返しが毎回失敗する場合は、Web サーバーと COM+ サーバーの間のネットワークがダウンしているか、COM+ サーバーが何らかの理由で動作を停止しています。

COM+ オブジェクトにメモリ リークやその他の原因がある可能性はありますか? オブジェクトは適切にリリースされていますか? ハンドル制限に達していますか? これの COM 側と Web 側をプロファイリングして、誰もがオブジェクト参照で適切に動作していることを確認する価値があるかもしれません。

于 2009-02-03T19:43:04.903 に答える