我正在开发一个使用SAP AG(版本3.0.2)中的SAP.Middleware.Connector的应用程序。
此应用程序在后台执行RFC(使用Task.Run),但几分钟后,该应用程序崩溃,在此图像中显示了堆栈跟踪。
DefaultDomain中未捕获的异常,堆栈跟踪: System.UnhandledExceptionEventArgs
未处理的异常:System.InvalidOperationException:集合已修改;枚举操作可能无法执行。
在System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源) 在System.Collections.Generic.Dictionary'2.KeyCollection.Enumerator.MoveNext() 在SAP.Middleware.Connector.RfcSessionManager.UpdateSessions(对象状态) 在System.Threading.TimerQueueTimer.CallCallbackInContext(对象状态) 在System.Threading.Executioncontext.RunInternal(ExecutionContext executeContext,ContextCallback,对象状态,布尔类型saveSyncCtx) 在System.Threading.Executioncontext.Run(ExecutionContext执行上下文,ContextCallback,对象状态,布尔类型saveSyncCtx) 在System.Threading.TimerQueueTimer.CallCallback() 在System.Threading.TimerQueueTimer.Fire() 在System.Threading.TimerQueueTimer.FireNextTimers() 在System.Threading.TimerQueueTimer.AppDomainTimerCallback()
这是RFC执行的代码:
return Task.Run(() =>
ConexionSAP cSap = new ConexionSAP();
cSap.ConectaSAP();
RfcDestination rfcDest = RfcDestinationManager.GetDestination(cSap.rfc);
RfcRepository rfcRep = rfcDest.Repository;
IRfcFunction function;
function = rfcRep.CreateFunction("XXXNAMEOFTHEFUNCTIONXXX");
//import parameters
RfcSessionManager.BeginContext(rfcDest);
function.Invoke(rfcDest);
//export parameters
RfcSessionManager.EndContext(rfcDest);
});
请,您能帮忙吗?
答案 0 :(得分:0)
谢谢您的帮助!
我正在回答这个问题。 如果在线程上使用 BeginContext 和 EndContext ,连接器将尝试更新连接,但是现在包含该连接的线程消失了,从而导致错误,集合已修改;枚举操作可能无法执行。
解决方案是删除 BeginContext 和 EndContext 行,一切正常且正常。