Исключение 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:
Надеюсь, что это помогает другим.
Я получаю ту же проблему при попытке использовать стандартную функцию BAPI с помощью метода connection.CreateFunction(). Похоже, что это происходит случайно.
RFCFunction funcModify = _r3Connection.CreateFunction("BAPI_ALM_NOTIF_DATA_MODIFY");
funcModify.Exports["NUMBER"].ParamValue = notifNo.PadLeft(12,'0');
Я разместил билет с программным обеспечением Theobald, владельцы ERPconnect. Выложу любую полезную информацию, если мне удастся добраться до работы.