1

通过 C# Web API 访问 SAP RFC 时遇到错误。以下是详细信息:我能够从存储在 out 参数中的 SAP RFC 获得响应,但是在将其返回给我的函数时会引发异常。这是代码:

    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 框架版本 4.5.2

请帮忙。

4

2 回答 2

0

尝试使用 connection.CreateFunction() 方法使用标准 BAPI 函数时,我遇到了同样的问题。它似乎也是随机发生的。

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

我已经用 ERPconnect 的所有者 theobald 软件发布了一张票。如果我设法上班,将发布任何有用的信息。

于 2015-10-06T08:37:11.773 回答
0

对于我的情况,问题与SystemWow文件夹中缺少librfc32.dll有关,我通过将两个 librfc dll 解决:一个用于 32 位,另一个用于Windows/Systems文件夹中的 64 位。

我参考了以下链接,它包含有关库位置和 dll 的所需信息:

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

希望这对其他人有帮助。

于 2015-10-12T11:54:25.357 回答