Как преодолеть исключение "Инициализатор типа для"SAP.Middleware.Connector.RfcConfigParameters"выдал исключение - Ошибка №:-2146233036"

У нас есть приложения, которые извлекают данные из систем SAP через DCOM SAP-коннектор. Недавно мы заменили на.NET разъем. После развертывания в производство он работал в течение одного дня. Внезапно он дает указанную ошибку при доступе к одному 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) Как преодолеть исключение, которое гласит: "Инициализатор типа для" SAP.Middleware.Connector.RfcConfigParameters "выдал исключение - Ошибка №: - 2146233036"?
(2) Наша основная подозрительная область - утечки памяти. Можем ли мы подозревать какие-либо другие области?
(3) Мы очень ограничены в отсутствии доступа к производственной среде. Так что мы пытаемся воспроизвести проблему на других серверах, к которым у нас есть полный доступ, например, dev и test. Мы рассматриваем многопользовательские и многопользовательские сценарии, чтобы воспроизвести проблему в других средах. Можем ли мы рассмотреть другие сценарии?

Обновить
Нам удалось воспроизвести проблему на одном из наших тестовых серверов. И попробовал ниже вещи, чтобы решить проблему. И установил распространяемый пакет обновления 1 для Visual C++ 2005, коннектор.NET 3.0 и VB6.0. Все еще проблема есть. Мы не можем найти причину проблемы.

Что еще я могу проверить и сделать, чтобы найти причину проблемы?

Редактирует на основе ответа:
1. Мы не используем статические переменные. 2. Мы установили распространяемый пакет обновления 1 (SP1) для Visual C++ 2005. Но это не помогло решить проблему.

2 ответа

После тщательного анализа и тщательного исследования мы нашли решение этой проблемы.

Мы используем SAP 3.0.4. Когда мы проверяем последние примечания к выпуску соединителя SAP для 3.0.9, говорится ниже

Улучшение: исключения конфигурации destanation Когда не указывались требуемые параметры конфигурации, например, SYSID, при попытке подключения через балансировку нагрузки было сгенерировано исключение очень низкого уровня, при котором не сразу было понятно, почему не удалось установить соединение. Теперь есть ранние проверки, и в случае проблемы с конфигурацией, описательное исключение RfcConfigurationException подробно информирует о проблеме конфигурации.

Ниже приведена выдержка из SAP Connector 3.0.8.

Замечания к выпуску 3.0.8 * Исправление: конфигурация пункта назначения Изменение уровня трассировки пункта назначения путем изменения конфигурации пункта назначения не оказало влияния на свойство TraceLevel для этого пункта назначения, даже когда было запущено событие обновления конфигурации.

Поэтому мы установили последний SAP-коннектор 3.0.10 и перестроили библиотеки DLL, используя последние библиотеки SAP-коннектора (sapnco.dll и sapnco_utils.dll). С этими последними dll проблема была решена.

Этот поток предполагает, что установка Visual C++ 2005 Redistributable SP1 package разрешила его. (из-за зависимости в sapnco_utils.dll)

Другие вопросы по тегам