Vous n'êtes pas sûr de nous avoir donné assez pour continuer, mais si je lis correctement, vous essayez de vous assurer que vous pouvez supporter une transaction via votre service WCF? Alors que votre base de données ne prend pas en charge les transactions et que vos points de terminaison WCF se trouvent derrière un équilibreur de charge? Est-ce que j'ai ceci correct? Si oui ...
Étant donné que votre base de données n'a pas de support transactionnel, elle se déplace vers votre niveau WCF. Cela suggère un niveau grossier de granularité dans vos méthodes, de sorte que vous pouvez vous assurer qu'un seul appel à votre service WCF englobe suffisamment votre transaction. Ne répartissez pas une transaction entre plusieurs appels WCF, vous demandez des problèmes.
MISE À JOUR: Il existe des stratégies qui peuvent être utilisées avec les équilibreurs de charge qui assurent la persistance entre les connexions, mais cela ne vous aidera pas ici. Si vous appelez EditEntity() de façon consécutive, et que la première entrée consiste à lancer une transaction, et que la seconde entrée consiste à effectuer une transaction ... alors votre service n'est pas suffisamment granulaire. Consolidez ces deux appels à une seule méthode, c'est-à-dire EditEntityComplete().
Y a-t-il une raison pour laquelle vous ne pouvez pas créer une méthode, par opposition à deux? MISE À JOUR # 2: Reformulation du problème - une seule méthode effectue des entrées dans une base de données qui ne prend pas en charge les transactions. La méthode en question exécute une série d'étapes qui doivent être complétées dans l'ordre. La méthode WCF représente des opportunités pour la contention simultanée de violer l'achèvement de l'étape dans le bon ordre. Avec cette base, en supposant que vous ne requérez aucune donnée de retour de la fonction, considérez une file d'attente asynchrone qui peut enregistrer des demandes à partir des points de terminaison WCF. Traitez ensuite la file d'attente à partir d'un seul processus d'arrière-plan.
Révision finale:
Reconsidérer l'exigence de ne pas changer le magasin de données.Compte tenu des exigences pour les clients multiples, besoin d'échelle, l'équilibrage de la charge et le soutien transactionnel dans le magasin de données, une suggestion finale - pousser à changer la base de données. Comprendre cela est une exigence statique, mais vous devrez déployer beaucoup d'efforts pour mettre en œuvre un support transactionnel lorsque de nombreuses plates-formes de base de données simples vous le fourniront. Essayer de recréer cette fonctionnalité a peu d'avantages mais beaucoup de désavantages.
Merci. Votre résumé est correct. Le problème est que le niveau WCF sera réparti sur plusieurs cases - c'est-à-dire à l'échelle. J'ai mis à jour ma question. – ng5000
Il n'y a qu'une seule méthode. Cependant, il est appelé par deux clients différents et chaque demande est desservie par une boîte physique différente. – ng5000
OK, je pense que j'ai une meilleure compréhension maintenant. Il semblait que deux appels consécutifs à EditEntity() étaient nécessaires pour effectuer une transaction. – jro