Hola Expertos,
Tengo un webservice en .Net para publicar Movimientos de Mercancías en SAP utilizando NCO 3.0, funciona bien y los datos se reflejan en SAP después de la ejecución de este servicio.
Pero 10 a 15 minutos después de ejecutar este webservice, recibo una excepción (Aparece una ventana de depuración Just in Time si Visual Studio está instalado en la máquina donde se hospeda este webservice; de lo contrario, puedo verlo en el registro de eventos).
ocurrió una excepción no controlada de Microsoft .NET Framework en w3wp.exe [8920]
a continuación se muestra la traza de la pila
Aplicación: w3wp.exe
Versión del Framework: v4.0.30319
Descripción: El proceso se terminó debido a una excepción no controlada.
Información de la Excepción: System.InvalidOperationException
Pila:
en System.ThrowHelper.ThrowInvalidOperationException(System.ExceptionResource)
en System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext()
en SAP.Middleware.Connector.RfcSessionManager.UpdateSessions(System.Object)
en System.Threading._TimerCallback.TimerCallback_Context(System.Object)
en System.Threading.ExecutionContext.runTryCode(System.Object)
en System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
en System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
en System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
en System.Threading._TimerCallback.PerformTimerCallback(System.Object)
A continuación se muestra mi fragmento de código
SAPConfig sapCfg = new SAPConfig();
try
{
try
{
RfcDestinationManager.RegisterDestinationConfiguration(sapCfg);
}
catch { }
SapRfcDestination = RfcDestinationManager.GetDestination(Destination);
RfcRepository SapRfcRepository = null;
SapRfcRepository = SapRfcDestination.Repository;
IRfcFunction bapiCommit = SapRfcRepository.CreateFunction("BAPI_TRANSACTION_COMMIT");
IRfcFunction function = SapRfcRepository.CreateFunction("BAPI_GOODSMVT_CREATE");
string tempdate = Utilities.ToSAPDateFormat(postingdate);
IRfcStructure MovHder = function.GetStructure("GOODSMVT_HEADER");
MovHder.SetValue("PSTNG_DATE", tempdate);
MovHder.SetValue("REF_DOC_NO", refDocNo); //nota de entrega
IRfcStructure MovCode = function.GetStructure("GOODSMVT_CODE");
MovCode.SetValue("GM_CODE", "01"); //recepción contra pedido
IRfcTable tblitems = function.GetTable("GOODSMVT_ITEM");
tblitems.Append();
tblitems.SetValue("PO_ITEM", "10");
tblitems.SetValue("PLANT", "9000");
tblitems.SetValue("STGE_LOC", "0001");
tblitems.SetValue("ENTRY_QNT", "1");
tblitems.SetValue("STCK_TYPE", ""); //sin restricciones X calidad
tblitems.SetValue("MOVE_TYPE", "101");
tblitems.SetValue("MVT_IND", "B"); // para orden de compra
tblitems.SetValue("VENDOR", VendorCode);
tblitems.SetValue("PO_NUMBER", PoNo);
RfcSessionManager.BeginContext(SapRfcDestination); //comienza la sesión ya que se debe llamar a la confirmación y al bapi de movimiento de mercancías en una sesión
function.Invoke(SapRfcDestination); //ejecuta el bapi de movimiento de mercancías
bapiCommit.Invoke(SapRfcDestination); //ejecuta el bapi de confirmación
IRfcStructure headRetorno = function.GetStructure("GOODSMVT_HEADRET");
IRfcTable rettable = function.GetTable("RETURN");
materialDoc = headRetorno.GetValue("MAT_DOC").ToString(); //headRetorno["MAT_DOC"].ToString();
//establece los parámetros de retorno al llamante
statuscode = "S";
statusmsg = materialDoc;
errormsg = "Publicado";
}
catch (Exception outerexp)
{
//establece los parámetros de retorno al llamante
statuscode = "E";
statusmsg = "";
errormsg = outerexp.Message;;
}
finally
{
try
{
R