SAP NCO 3.0 库在调用 RFCServer.Shutdown 时抛出 "AccessViolationException"

SAP NCO 3.0 Library throwing "AccessViolationException" when calling RFCServer.Shutdown

我遇到 SAP NCO 3.0 库 的问题,但甚至无法登录他们的网站 post 在他们的论坛上,因为服务器错误 500。

问题是我设置了一个 RFCServer 来接收来自 SAP 系统的 iDoc(<i>IDOC_INBOUND_ASYNCHRONOUS</i> 用于函数 table),它接收一个iDoc 并做一些处理。

当服务器正在接收大量文件并且用户关闭 RFCServer 时,SAP 库抛出 <i>AccessViolationException</i> 导致整个应用程序崩溃。

我已经尝试用 [HandleProcessCorruptedStateExceptions] 属性修饰封装的 Shutdown 方法,但仍然没有捕获到异常。

密码是:

    public void Shutdown()
    {
        try
        {
            if (_SapServer != null)
            {
                _SapServer.Shutdown(false);
            }
        }
        catch (Exception e)
        {
            throw new Exception("Error stopping server", e);
        }

        if (_SapServer != null)
        {
            _SapServer.RfcServerError -= OnRfcServerError;
            _SapServer.RfcServerApplicationError -= OnRfcServerApplicationError;
            _SapServer.RfcServerStateChanged -= OnRfcServerStateChanged;
            _SapServer.TransactionIDHandler = null;
        }
    }

我已将 Shutdown(true) 换成 Shutdown(false),这会告诉它中止 运行 调用。

堆栈跟踪是:

"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

at STRCV(Byte* , Char* , Int32* , Int32* , Int32* , Int32* , Int32* , Int32* )
at SAP.Middleware.Connector.CpicConnection.CpicReceive(Int32 timeout)
at SAP.Middleware.Connector.RfcConnection.Accept(Int32 timeout)
at SAP.Middleware.Connector.RfcConnection.RfcServerWorkerThreadProc(Object rfcConnObj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()

at System.Threading.ThreadPoolWorkQueue.Dispatch()

in sapnco_utils.dll

如果有人能给我指出正确的方向,因为我基本上已经走到了死胡同。

有点晚了,但对于遇到相同问题的任何人,修复方法是确保将用于保持 CPIC 响应活动的常规配置参数设置为 false。

GeneralConfiguration.CPICKeepAliveResponse = false;

似乎如果您最终遇到在接收连接时停止 SAP 服务器的情况,它有时会抛出此异常(可能与持续存在的底层连接有关)。将此设置为 false 可解决问题。