none
WCF Error: system.outofmemoryexception RRS feed

  • Pregunta

  • Buenas noches,

    Tengo levantado un WCF en modo Windows Service el cual ejecuta Lineas de comandos para diversas aplicaciones el caso es en determinado momento me devuelte un error: system.outofmemoryexception

    Aqui les dejo el codigo

        [ServiceBehavior(
            ConcurrencyMode = ConcurrencyMode.Multiple,
            InstanceContextMode = InstanceContextMode.Single,
            AddressFilterMode = AddressFilterMode.Any)]
           private int ExecuteProcess(int idEjecucion, int idTarea, string fileName, string arguments, int timeout,
                out string standardOutput, out string standardError)
            {
                int exitCode;
                bool test = false;
    
                using (var process = new Process())
                {
                    _alertlog.Alert(
                        string.Format("ExecuteProcess: ({0})({1}) - {2} {3}", idEjecucion, idTarea, fileName, arguments),
                        AlertLog.Tipo.Info);
    
                    process.StartInfo.UseShellExecute = false;
                    process.StartInfo.CreateNoWindow = true;
                    process.StartInfo.RedirectStandardError = true;
                    process.StartInfo.RedirectStandardOutput = true;
                    process.StartInfo.FileName = string.Format("\"{0}\"", fileName);
                    process.StartInfo.Arguments = arguments;
                    process.Start();
    
                    if (!test)
                    {
                    DetalleEjecucionBL.Instancia.UpdateIdProcessPN(idEjecucion, idTarea, process.Id);
                    }
                    using (Task<bool> processWaiter = Task.Factory.StartNew(() => process.WaitForExit(timeout)))
                    using (Task<string> outputReader = Task.Factory.StartNew((Func<object, string>)ReadStream, process.StandardOutput))
                    using (Task<string> errorReader = Task.Factory.StartNew((Func<object, string>)ReadStream, process.StandardError))
                    {
                        var waitResult = processWaiter.Result;
    
                        //if (!waitResult)
                        //{
                        //    process.Kill();
                        //}
    
                        Task.WaitAll(outputReader, errorReader);
    
                        if (!waitResult)
                        {
                            throw new TimeoutException("El tiempo de espera del proceso ha caducado.");
                        }
    
                        exitCode = process.ExitCode;
                        standardOutput = outputReader.Result;
                        standardError = errorReader.Result;
                    }
                }
                _alertlog.Alert(string.Format("ExitCode: ", exitCode), AlertLog.Tipo.Info);
                Thread.Sleep(1000*60);
                return exitCode;
            }
    
            private static string ReadStream(object streamReader)
            {
                var result = ((StreamReader) streamReader).ReadToEnd();
    
                return result;
            }

            <binding name="APPBinding" closeTimeout="10:00:00" openTimeout="10:00:00"
        receiveTimeout="10:00:00" sendTimeout="10:00:00" maxReceivedMessageSize="2147483647"
             maxBufferSize="2147483647" maxBufferPoolSize="2147483647" portSharingEnabled="false" transactionFlow="false">
              <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                  maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            </binding>
    

    viernes, 10 de abril de 2015 1:35

Respuestas

  • porqué no pones todo el codigo de ExecuteProcess dentro de un bloque try/catch, en ese catch capturar dicho tipo de excepcion(outofmemoryexception) y hacer un log de ello analizando el InnerException y el StackTrace? Con esto podremos ver algo mas de info

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta Blueh Scouth lunes, 20 de abril de 2015 2:13
    viernes, 10 de abril de 2015 3:05
    Moderador