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 可解决问题。
我遇到 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 可解决问题。