J'ai un serveur C# WCF multithread avec des ressources stockées dans la base de données. J'accède à db avec EF.Serveur WCF multithread avec Entity Framework: transactions et synchronisation, condition de concurrence
Le serveur traite les demandes provenant de nombreux travailleurs. Les travailleurs sont connectés en groupes. Chaque groupe a ses propres ressources dans la base de données. Certains groupes partagent des ressources avec un autre groupe.
Toutes les requêtes concernent des ressources: synchronisation, création, mise à jour, suppression. Si les travailleurs A et B sont avec le même groupe, l'opérateur A demande une mise à jour, puis B demande la synchronisation, et la demande de B commence et se termine avant que la demande de A se termine, alors l'opérateur B n'obtiendrait jamais la mise à jour de A
Existe-t-il un moyen avec une structure d'entité de faire des opérations atomiques comme get_and_increase_if
? Je voudrais implémenter un outil de type sémaphore sur la valeur de base de données.
Existe-t-il un autre moyen de résoudre ce problème?
La synchronisation est effectuée par un compteur de révisions. Le groupe a une révision. Création/mise à jour se fait par:
Increase group revision()
Set new/updated object revision to new group revision()
Edit: Il existe plusieurs types de ressources, chacun dans sa propre table db. Je ne peux donc pas simplement définir la valeur suivante comme révision pour la ressource.
Peut-être que c'est moi, mais je trouve cette question très vague. De quels groupes parlez-vous? Quelle est cette requête de synchronisation dont vous parlez? Pourquoi vos différentes demandes devraient-elles interagir? Pourquoi ne pouvez-vous pas résoudre cela avec des transactions de base de données? – Steven
@Steven Worker demande la synchronisation, il a sa propre révision. Le serveur vérifie simplement s'il y a quelque chose de nouveau pour la révision du travailleur ('if worker.revision
Ari