DCOM SAPコネクタを介してSAPシステムからデータをフェッチするアプリケーションがあります。最近、.NET コネクタに置き換えました。本番環境にデプロイした後、1 日は機能しました。1 つの RFC にアクセスしているときに、突然指定されたエラーが発生します。例外メッセージは
"SAP.Middleware.Connector.RfcConfigParameters" の型初期化子が例外をスローしました - エラー番号:-2146233036。
SAP.Middleware.Connector.RfcConfigParameters のオブジェクトを作成して使用するコードは以下のとおりです。
string Value1 ="Val1";
string Value1 ="Val2";
string Value1 ="Val3";
string Value1 ="Val4";
string Value1 ="Val5";
string Value1 ="Val6";
string Value1 ="Val7";
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.Param1, Value1);
parms.Add(RfcConfigParameters.Param2, Value2);
parms.Add(RfcConfigParameters.Param3, Value3);
parms.Add(RfcConfigParameters.Param4, Value4);
parms.Add(RfcConfigParameters.Param5, Value5);
parms.Add(RfcConfigParameters.Param6, Value6);
parms.Add(RfcConfigParameters.Param7, Value7);
SapRfcDestination = RfcDestinationManager.GetDestination(parms);
RfcCustomDestination customDest = SapRfcDestination.CreateCustomDestination();
IRfcFunction func = customDest.Repository.CreateFunction("RFC_FUNCTION");
func.SetValue("DATA1", "VAL1")
func.SetValue("DATA2", "VAL2")
func.SetValue("DATA3", "VAL3")
RfcStructureMetadata metaData = customDest.Repository.GetStructureMetadata("STRUCTURENAME");
IRfcTable rfcTable = func.GetTable("TABLENAME");
例外情報を追跡しました。以下は例外情報です
System.TypeInitializationException: The type initializer for '<Module>' threw an exception. ---> <CrtImplementationDetails>.ModuleLoadException: The C++ module failed to load.
---> System.IO.FileLoadException: Could not load file or assembly 'msvcm80, Version=8.0.50727.6195, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
File name: 'msvcm80, Version=8.0.50727.6195, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ---> System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at <CrtImplementationDetails>.DoDllLanguageSupportValidation()
at <CrtImplementationDetails>.LanguageSupport._Initialize(LanguageSupport* )
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
--- End of inner exception stack trace ---
at <CrtImplementationDetails>.ThrowModuleLoadException(String errorMessage, Exception innerException)
at <CrtImplementationDetails>.ThrowModuleLoadException(String , Exception )
at <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* )
at .cctor()
--- End of inner exception stack trace ---
at SAP.Middleware.Connector.RfcConfigParameters..cctor()- Stack trace: at SAP.Middleware.Connector.RfcConfigParameters..ctor()
以下は私たちの観察
です 1.常に問題が発生するわけではありません。問題は断続的に投げています。
2. サーバー マシンに移動してそこでアプリケーションを実行すると、エラーがスローされません。エラーは、アプリケーションが他のクライアント マシンからアクセスした場合にのみスローされます。
3. 同じ問題は、開発、テスト、およびステージング環境では再現できません。これは本番環境だけの問題です。 4. 特定の dll を再デプロイすると、1 日または半日はエラーなしで動作し始め、翌日以降はエラーがスローされます。
私の具体的な質問は次のとおりです(1)「「SAP.Middleware.Connector.RfcConfigParameters」の型初期化子が例外をスローしました-エラー番号:-2146233036」という例外を克服する方法は?
(2) 私たちの主な疑わしい領域はメモリ リークです。他の領域を疑うことはできますか?
(3) 本番環境へのアクセスは非常に制限されているか、まったくありません。そのため、dev や test などのフル アクセス権を持つ他のサーバーで問題を再現しようとしています。他の環境で問題を再現するために、マルチ ユーザーおよびマルチ ログインのシナリオを検討しています。他のシナリオを検討できますか?
更新
テスト サーバーの 1 つで問題を再現することができました。そして、問題を解決するために以下を試しました。Visual C++ 2005 Redistributable SP1、.NET コネクタ 3.0、VB6.0 をインストール。まだ問題があります。問題の根本原因を見つけることができません。
問題の根本原因を見つけるために、他に何を確認して実行できますか?
応答に基づく編集:
1. 静的変数は使用していません 2. Visual C++ 2005 Redistributable SP1 をインストールしましたが、それでも問題は解決しませんでした。