我在使用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中
如果有人能指出我正确的方向,因为我基本上已经走到了尽头。
答案 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可解决此问题。