J'ai une grande application web sur asp.net 2.0. Ici, vous ouvrez l'éditeur d'objet et vous y apportez quelques modifications. Ils ne peuvent pas ouvrir le même objet en même temps. Après avoir appuyé sur "save" btn, toutes les modifications sont enregistrées pour sauvegarder sur le serveur via la publication. J'utilise la transaction pour sauvegarder. Il y a beaucoup de procédures, de vérifications et d'autres à faire avant que l'opération d'enregistrement soit OK.en attente de commande bloque les autres transactions
using (SqlConnection con = .........)
{
SqlTransaction trans = null;
try
{
con.Open();
trans=con.BeginTransaction(IsolationLevel.ReadUncommitted);
........operations.........
trans.Commit();
}
catch (Exception e)
{
try { if (trans != null) trans.Rollback(); }
catch { }
throw new MyException("SQL Exception: " + e.Message, e);
}
finally
{
if (con != null && con.State == ConnectionState.Open) con.Close();
}
}
Pour moi ce code est assez sûr.
Mais arrive périodiquement: un processus de cette application Web sur l'opération d'enregistrement sur mssql est devenu "sleep/waiting". et d'autres processus appelés par d'autres utilisateurs sont devenus bloqués par ce processus et organisent une file d'attente. L'un d'entre eux a excédé le délai d'attente ..... mais d'autres attendent. Donc, ma question est la suivante: est-ce que mon code a une mauvaise opération qui permet à la commande de devenir endormie/en attente? Peut-être y a-t-il des trucs?
Vous avez évidemment omis le code pour raccourcir votre exemple de code, donc c'est peut-être à cause de ça, mais je ne vois pas de trans.Commit() appeler n'importe où dans votre code? – jvanrhyn
De cause j'ai ....... – cyssima
Quel est le but du bloc catch vide après 'try {if (trans! = Null) trans.Rollback(); } '. Vous vous demandez si cela enterre une erreur. –