Исключение AccessViolation в C# Web API

Обнаружена ошибка при доступе к SAP RFC через C# Web API. Вот подробности: я могу получить ответ от SAP RFC, который хранится в out param, но он выдает исключение при возврате этого в мою функцию. Вот код:

    internal string FromBupaToBupaGuid(string sBupa)
    {
        using (SAPContext db = new SAPContext(base.GetConnectStringForRfcUser()))
        {
            ERPConnect.LIC.SetLic(base.GetLicenseKey());
            string sBupaGuid;
            SAPContext.MESSAGESTable mESSAGESTable = new SAPContext.MESSAGESTable();
            sBupa = ToBupa(sBupa);
            db.IST_GET_BPARTNER_GUID(out sBupaGuid, sBupa, mESSAGESTable);

            return sBupaGuid;
        }
    }

Вот информация об исключении:

System.AccessViolationException was unhandled
  HResult=-2147467261
  Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
  Source=ERPConnect40
  StackTrace:
       at ERPConnect.RFCAPI.RfcCallReceiveExt(Int32 handle, Int32 hSpace, String FuncName, StringBuilder Exception)
       at ERPConnect.R3Connection.Ping()
       at ERPConnect.Linq.ERPDataContext.Dispose(Boolean disposing)
       at ERPConnect.Linq.ERPDataContext.Dispose()

Примечание: в коде нет проблем, потому что его тихий старый код работал нормально на моей более ранней машине (Windows 7 + VS 2012), теперь у меня Windows 8.1.

Я уже попробовал:

  • Установите и снимите оба флажка - Инструменты> Параметры> Отладка> Общие> Подавить оптимизацию JIT при загрузке модуля (только для управляемого)
  • Visual Studio 2012 и 2013 оба попробовали
  • .Net Framework версия 4.5.2

Пожалуйста помоги.

2 ответа

Решение

В моем случае проблема была связана с тем, что librfc32.dll отсутствовал в папке SystemWow, и я решил ее, поместив две библиотеки librfc: одну для 32-битной и другую для 64-битной в папку Windows/Systems.

Я сослался на ссылку ниже, и она содержит необходимую информацию о расположении библиотеки и DLL:

https://my.theobald-software.com/index.php?/Knowledgebase/Article/View/71/9/theobald--products-in-a-64-bit-environment

Надеюсь, что это помогает другим.

Я получаю ту же проблему при попытке использовать стандартную функцию BAPI с помощью метода connection.CreateFunction(). Похоже, что это происходит случайно.

RFCFunction funcModify = _r3Connection.CreateFunction("BAPI_ALM_NOTIF_DATA_MODIFY");
                funcModify.Exports["NUMBER"].ParamValue = notifNo.PadLeft(12,'0');

Я разместил билет с программным обеспечением Theobald, владельцы ERPconnect. Выложу любую полезную информацию, если мне удастся добраться до работы.

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