Olá Especialistas,
Tenho um webservice em .Net para publicar Movimentos de Mercadorias no SAP utilizando NCO 3.0, ele funciona bem e os dados são refletidos no SAP após a execução deste serviço.
Mas 10 a 15 minutos após a execução deste webservice, recebo uma exceção (uma janela de depuração Just in Time aparece se o Visual Studio estiver instalado na máquina onde este webservice está hospedado; caso contrário, posso vê-lo no log de eventos).
ocorreu uma exceção não tratada do Microsoft .NET Framework em w3wp.exe [8920]
abaixo está a rastreabilidade
Aplicação: w3wp.exe
Versão do Framework: v4.0.30319
Descrição: O processo foi encerrado devido a uma exceção não tratada.
Informações da Exceção: System.InvalidOperationException
Pilha:
em System.ThrowHelper.ThrowInvalidOperationException(System.ExceptionResource)
em 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()
em SAP.Middleware.Connector.RfcSessionManager.UpdateSessions(System.Object)
em System.Threading._TimerCallback.TimerCallback_Context(System.Object)
em System.Threading.ExecutionContext.runTryCode(System.Object)
em System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
em System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
em System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
em System.Threading._TimerCallback.PerformTimerCallback(System.Object)
Abaixo está meu trecho 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"); //receção 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", ""); //sem restrições X qualidade
tblitems.SetValue("MOVE_TYPE", "101");
tblitems.SetValue("MVT_IND", "B"); // para ordem de compra
tblitems.SetValue("VENDOR", VendorCode);
tblitems.SetValue("PO_NUMBER", PoNo);
RfcSessionManager.BeginContext(SapRfcDestination); //inicia a sessão pois é necessário chamar a confirmação e o bapi de movimento de mercadorias em uma sessão
function.Invoke(SapRfcDestination); //executa o bapi de movimento de mercadorias
bapiCommit.Invoke(SapRfcDestination); //executa o bapi de confirmação
IRfcStructure headRetorno = function.GetStructure("GOODSMVT_HEADRET");
IRfcTable rettable = function.GetTable("RETURN");
materialDoc = headRetorno.GetValue("MAT_DOC").ToString(); //headRetorno["MAT_DOC"].ToString();
//estabelece os parâmetros de retorno ao chamador
statuscode = "S";
statusmsg = materialDoc;
errormsg = "Publicado";
}
catch (Exception outerexp)
{
//estabelece os parâmetros de retorno ao chamador
statuscode = "E";
statusmsg = "";
errormsg = outerexp.Message;;
}
finally
{
try
{
R