调用RFCServer.Shutdown

时间:2019-02-22 10:59:50

标签: c# .net sap access-violation

我在使用SAP NCO 3.0库时遇到问题,但是由于服务器错误500,甚至无法登录他们的网站在他们的论坛上发帖。

问题是我设置了一个RFCServer来从SAP系统(功能表的 IDOC_INBOUND_ASYNCHRONOUS )接收iDoc,该系统接收iDoc并进行一些处理。

当服务器正在接收大量文件并且用户关闭RFCServer时,SAP库将引发 AccessViolationException ,导致整个应用程序崩溃。

我尝试使用

来修饰封装的Shutdown方法。
[HandleProcessCorruptedStateExceptions]

属性,但仍未捕获到异常。

代码是;

    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),这告诉它终止正在运行的呼叫。

堆栈跟踪为;

  

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

     

在STRCV(Byte *,Char *,Int32 *,Int32 *,Int32 *,Int32 *,Int32 *,   Int32 *)
  在   SAP.Middleware.Connector.CpicConnection.CpicReceive(Int32超时)
  在SAP.Middleware.Connector.RfcConnection.Accept(Int32超时)
  在SAP.Middleware.Connector.RfcConnection.RfcServerWorkerThreadProc(Object   rfcConnObj)
  在System.Threading.ExecutionContext.RunInternal(ExecutionContext   executionContext,ContextCallback回调,对象状态,布尔值   reserveSyncCtx)
  在System.Threading.ExecutionContext.Run(ExecutionContext   executionContext,ContextCallback回调,对象状态,布尔值   reserveSyncCtx)
  在System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()

     

在System.Threading.ThreadPoolWorkQueue.Dispatch()

     

在sapnco_utils.dll中

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

1 个答案:

答案 0 :(得分:0)

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

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_TimeUtils", referenced from:
      objc-class-ref in NotificationService.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

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