Re: Gestión de errores
Alberto León <[email protected]> Thu, 13 May 2010 13:14:58 +0200
| Newsgroups | gmane.comp.gnome.mono.hispano |
|---|---|
| Message-ID | <[email protected]> |
En la lista de mono-asp hay un hilo no resuelto sobre algo parecido
(en el caso de los socket)
I realised (after reading the documentation on strace, funny that)
that I could attach it to an existing process and therefore I was able
to get some useful information straight away. It appears to me that
after trying to find the odbc.ini file in the web application root
directory, mono does indeed manage to locate it in the /etc/
directory:
[pid 3060] 18:06:49.156800 open("/etc/odbc.ini", O_RDONLY) = 9
[pid 3060] 18:06:49.156898 fstat(9, {st_mode=S_IFREG|0644,
st_size=465, ...}) = 0
[pid 3060] 18:06:49.157042 mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa1f04f1000
[pid 3060] 18:06:49.157168 read(9, "\n[MySQL]\nDescription =
M"..., 4096) = 465
The problem is not with the configuration, therefore, but appears to
be that mono cannot open a socket to MySQL:
[pid 3060] 18:06:49.158096 connect(9, {sa_family=AF_FILE,
path="/var/run/mysqld/mysqld.sock"}, 110) = 0
[pid 3060] 18:06:49.158292 setsockopt(9, SOL_SOCKET, SO_RCVTIMEO,
"\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
[pid 3060] 18:06:49.158554 setsockopt(9, SOL_SOCKET, SO_SNDTIMEO,
"\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
[pid 3060] 18:06:49.158989 setsockopt(9, SOL_IP, IP_TOS, [8], 4) = -1
EOPNOTSUPP (Operation not supported)
[pid 3060] 18:06:49.159139 setsockopt(9, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
This is my interpretation, anyway. We do know that the connection
fails, at least.
Thanks again for your time.
Kind regards,
El día 13 de mayo de 2010 13:11, Rubén Rubio Fidalgo
<[email protected]> escribió:
> Vamos a ver, te cuento.
>
> Ya hay try..catch por todos los lados. El problema es que el error está saltando dentro del conector mysql (versión 6.2.2) tras rechazar la conexión el servidor (no da timeout, símplemente da connection refused y en otras ocasiones errores de socket o resulset en los datareader, son 5 errores diferentes y siempre del conector de MySql con Mono) capturando el error en el try..catch, pero hace algo más ya que después me cierra el hilo.
>
> Esto pasa solo con Mono y no con Microsoft .NET Framework (con el de Microsoft no da ningún error), y estoy intentando recopilar información para poder documentarlo y pasar el bug. De hecho en Google hay referencias a esto (incluso en el bugzilla de MySql aparace cerrado el bug por no ser problema suyo sino de Mono) pero en ningún sitio aparece una solución.
>
> Estaba intentando implementar el evento UnhandledException del dominio de aplicación actual (dentro de cada hilo secundario) que cierra el hilo pero debería documentar el error previamente, pero no me está recogiendo nada, y no sé si lo tengo bien.
>
> Lo que hago es añadir a la clase del hilo secundario el atributo [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)] para que me permita hacerlo y a continuación declarar el evento AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
>
> No sé si con esto queda todo más claro.
>
> Gracias por todo.
>
> ________________________________________
> De: Alberto León [[email protected]]
> Enviado el: jueves, 13 de mayo de 2010 12:12
> Para: Rubén Rubio Fidalgo
> CC: [email protected]
> Asunto: Re: [Mono-hispano] Gestión de errores
>
> Desde mi punto de vista creo que es tan sencillo como llenar todo de Try y Catch
> y cuando captures un error enviártelo por mail o escribirlo a un
> archivo de texto.
>
> Es muy fácil capturar la información de un error.
>
> 2010/5/13 Rubén Rubio Fidalgo <[email protected]>:
>> Hola a todos,
>>
>> Tengo una aplicación en producción con mono 2.6.4 que funciona correctamente
>> mediante mono-service2 (es un servicio).
>>
>> Se trata de una aplicación multihilo, la cual desde el hilo principal abre
>> una serie de hilos "secundarios" que están en ejecución permanentemente
>> realizando acciones contra una base de datos mysql. Para estas acciones,
>> estos hilos "secundarios" a su vez abren una serie de hilos adicionales,
>> llegando a estar actualmente en ciertos momentos hasta 48 hilos en ejecución
>> simultánea.
>>
>> Pues bien, de vez en cuando me saltan errores que no deben estar controlados
>> (y no puedo iniciarla con --debug por temas de rendimiento) y me cierra o
>> bien todo el servicio o bien uno de los hilos secundarios.
>>
>> Mi pregunta es si se puede poner algún control de errores global que aunque
>> me cierre la aplicación o un hilo secundario (esto segundo sería mejor ya
>> que los hilos secundarios los reinicio automáticamente al detectar su caída)
>> me permita recopilar información del punto y el motivo del error.
>>
>> Gracias y un saludo.
>> ________________________________
>>
>> AVISO DE CONFIDENCIALIDAD:
>> Este mensaje va dirigido, de manera exclusiva, a su destinatario y contiene
>> información confidencial y sujeta al secreto profesional, cuya divulgación
>> no está permitida por la ley. En caso de haber recibido este mensaje por
>> error, le rogamos que, de forma inmediata, nos lo comunique mediante correo
>> electrónico remitido a nuestra atención y proceda a su eliminación, así como
>> a la de cualquier documento adjunto al mismo. Asimismo, le comunicamos que
>> la distribución, copia o utilización de este mensaje, o de cualquier
>> documento adjunto al mismo, cualquiera que fuera su finalidad, están
>> prohibidas por la ley.
>>
>> ________________________________
>> _______________________________________________
>> Mono-hispano mailing list
>> [email protected]
>> https://listas.hispalinux.es/mailman/listinfo/mono-hispano
>>
> ________________________________
> AVISO DE CONFIDENCIALIDAD:
> Este mensaje va dirigido, de manera exclusiva, a su destinatario y contiene información confidencial y sujeta al secreto profesional, cuya divulgación no está permitida por la ley. En caso de haber recibido este mensaje por error, le rogamos que, de forma inmediata, nos lo comunique mediante correo electrónico remitido a nuestra atención y proceda a su eliminación, así como a la de cualquier documento adjunto al mismo. Asimismo, le comunicamos que la distribución, copia o utilización de este mensaje, o de cualquier documento adjunto al mismo, cualquiera que fuera su finalidad, están prohibidas por la ley.
> ________________________________
>