2009-10-19 6 views
0

J'ai un service Web asp.net fonctionnant sur un serveur Web avec l'une des méthodes Web (wm) que effectue un traitement basé sur un paramètre (param) .Service Web ASP.NET - restreindre certaines instances concurrentes en fonction de la validation

Je souhaite limiter les appels simultanés à cette méthode Web uniquement dans certains cas, notamment lorsque la valeur de param transmise par client1 est égale à param passé par client2.

Je pensais ajouter une validation au début de wm pour vérifier les conditions avant le début du traitement.

Mes questions sont les suivantes:

  1. Comment puis-je savoir à partir de ma méthode web, si une autre instance du service Web appelant la même méthode Web en cours d'exécution.
  2. Comment puis-je avoir accès aux paramètres transmis à ma méthode Web sur différentes instances simultanées du service Web pendant leur exécution.

Je veux éviter l'enregistrement de base de données, car dans le cas où le serveur tombe en panne le journal ne peut pas être mis à jour (à moins d'une bonne façon de faire face à cette possibilité)

Répondre

0

services Web à mon humble avis devrait être apatride et vous devez éviter de faire ce genre de choses. Sinon du bout de ma tête (non testé):

[WebMethod] 
public void SomeMethod(string p) 
{ 
    var cache = HttpContext.Current.Cache; 
    // Be careful with the equality comparison here 
    // it might not work with complex types 
    if (cache["param"] == p) 
    { 
     throw new Exception("Another client has called this method with same argument"); 
    } 
    cache["param"] = p; 
    try 
    { 
     // Execute your method here 
    } 
    finally 
    { 
     cache.Remove("param"); 
    } 
} 
+0

Merci beaucoup Darin! –

Questions connexes