.NET, Architecture, ALM, Cloud

Publicité

WCF & DataFlow

Le Framework DataFlow mixés avec WCF vont être un excellent moyen pour vous permettre de gréer des services asynchrone devant effectuer des tâches longues à mettre en file d’attente.

Considérons le contrat de service suivant : 

[ServiceContract]
public interface IDemoService
    {
        [
OperationContract(IsOneWay=true)]
       
void PostRequest(MyRequest request);
    }



Nous avons donc une méthode du service « PostRequest » où le client n’attend pas de retour. Nous souhaitons faire une implémentation de service permettant de mettre en file d’attente la requête utilisateur pour que le serveur la traite quand il le pourra.
Voici un exemple d’implémentation avec le Framework DataFlow : 

[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.Single)]
   
public class DemoService : IDemoService
    {
       
private static ActionBlock<MyRequest> _queue;

       
static DemoService()
        {
           
ExecutionDataflowBlockOptions options = new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism = 10
            };
            _queue =
new ActionBlock<MyRequest>((R) =>
                {
                   
Thread.Sleep(5000);
                   
File.WriteAllText(Path.Combine(@"C:\Demo",
tring.Format("{0}.txt", Guid.NewGuid())), String.Empty);
                }, options);
        }
 
       
public void PostRequest(MyRequest request)
        {
            _queue.Post(request);
        }
    }



Nous avons donc la méthode « PostRequest » qui mets dans la file d’attente la requête (« AcctionBlock » qui représente notre flow de traitement) et nous avons défini que la file d’attente peut traiter 10 tâches en même temps.
Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article