Hola Gustavo,
Tengo una serie de dudas bastante grande con respecto al uso de Threads en
vez de usar elementos Batch que Sharepoint recomienda para Inserciones y
actualizaciones masivas de datos.
Intentaré resumir la problemática:
Actualmente en un mismo poyecto estamos trabajando conjuntamente 2 empresas:
empresa A que somos nosotros y la empresa B que es de Madrid.
La empresa B ha ralizado un webpart de aprobación de facturas, resulta que
para que el proceso de aprobación se reduzca en tiempo han utilizado Threads
de la Framework .net 1.1.
Bien es sabido que Sharepoint recomienda usar procesos Batch para realizar
inserciones y actualizaciones masivas.
En realidad lo que hace ese webpart es lanzar un thread por factura que
existen en una lista, al finalizar las tareas del webpart se ejecuta un
procedimiento almacenado que permite actualizar una Base de Datos de SAGE (
aplicacion de contabilidad ), pues bien:
El problema reside en que se están produciendo Bloqueos en la BBDD ( sql
server 2000 ) te paso el mensaje de error:
////////////////////////////////////////////////////////////////////
Función ActualizaERP con SQL: declare @NumeroFactura nvarchar(17)declare
@CIFProveedor nvarchar(20)declare @Estado nvarchar(17)declare @URLSite
nvarchar(255)set @NumeroFactura = 'F-2006-59'set @CIFProveedor =
'A48035901'set @Estado = 'Aprobada'set @URLSite =
'
http://srvsps/sites/facturascoop/Li...m.aspx?IDT'EXECUTE
sp_IWFL_UPDEstadoFacturas @NumeroFactura, @CIFProveedor, @Estado, @URLSite Ha
provocado este error --> Exception: La transacción (Id. de proceso 52) quedó
en interbloqueo en lock recursos con otro proceso y fue elegida como sujeto
del interbloqueo. Ejecute de nuevo la transacción.
facturascoop/Lists/AprobadasUN/DispForm.aspx?IDT
Sep 27 2006 5:32PM[ at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at NPS.Webparts.Utilities.ActualizaERP(String cadenaConexion, String
sitioDestino, String listaDestino, String sitioDestinoRechazadas, String
listaDestinoRechazadas, SPListItem Item, String strEstadoERP)]
/////////////////////////////////////////////////////////////////////////
lo que el mensaje nos da en cuestión es lo siguiente:
Exception: La transacción (Id. de proceso 52) quedó en interbloqueo en lock
recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute
de nuevo la transacción.
ya que al parecer se está intentando llamar al mismo procedimiento a la vez
por dos procesos.
Además hemos notado que en algunos casos las tareas que se ejecutan dentro
del webpart no todas se ejecutan correctamente, si no que en algun momento
algunas no se llegan a ejecutar, lo que produce que las facturas se pierdan y
no se puedan recuperar de ninguna forma.
Puede darse el caso que el uso de Threads en vez de procesos Batch esté
generando este problema??
La BBDD nos avisa de manera correcta que se ha producido el interbloqueo y
la información que he encontrado en internet nos dice que varios procesos
están intentando acceder al mismo recurso por lo que la BBDD para la
ejecución de unos de esos procesos hasta que pueda estar libre para el
siguiente.
T e ha pasado alguna vez algo como esto o similar ?? sabes alguna otra
opción que pudieramos considerar, estamos ciegos y no sabemos como resolver
esta situación.
Al cliente l he reiterado que el uso de Threads no es lo mas corriente,
debido a que a veces nop trabajan como deberían, pero desde microsoft nos
recomiendan usar los procesos batch que te he comentado y que en su SDK viene
recogido como algo importate a tener en cuenta.
Muchas gracias y un saludo.
Leer las respuestas