Buen día expertos, estoy trabajando en una aplicación web con lenguaje asp.net para crear cotizaciones.
Realizando las pruebas finales antes de enviarla a producción me percaté que hay un problema cuando dos usuarios quieren crear un documento exactamente al mismo tiempo.
Si inicio una transacción y espero a que finalice para inmediatamente empezar una nueva no pasa nada, se crean ambos documentos sin problema; pero si en el transcurso de que la primera transacción está siendo procesada inicio una segunda paralelamente, ahi es cuando viene el problema: las páginas de ambos usuarios se quedan cargando indefinidamente y se inhiben varias tablas de la base de datos (supongo que para evitar datos corruptos o algo similar).
Estoy consciente de que el DI API no soporta multi-hilo, y que se debe hacer una transacción a la vez, quería consultar con ustedes si saben alguna forma de hacer una especie de “fila de espera” para que la segunda transacción aguarde hasta que la que se está ejecutando concluya correctamente.
Actualmente la forma en la que creo el documento es la siguiente:
int iret = Cotizacion.Add();
//Revisar si se creó el documento
if (iret == 0)
{
docEntry = oCompany.GetNewObjectKey();
if (oCompany.InTransaction)
oCompany.EndTransaction(BoWfTransOpt.wf_Commit);
if (oCompany.Connected)
oCompany.Disconnect();
System.Runtime.InteropServices.Marshal.ReleaseComObject(Cotizacion);
ShowMessage("Se creó con éxito la cotización");
con.Close();
}
else
{
int errNum; string errMsj;
oCompany.GetLastError(out errNum, out errMsj);
if (oCompany.InTransaction)
oCompany.EndTransaction(BoWfTransOpt.wf_RollBack);
string error = "Error al crear la cotización: " + errMsj + " | Código: " + errNum.ToString();
ShowMessage(error, MessageType.Error);
}
Agradezco de antemano cualquier apoyo, ejemplo u orientación que puedan brindarme. Saludos cordiales.