2010-09-17 4 views
0

En prenant le scénario follwing dans la consommation d'une méthode WCF:méthode wcf dans une boucle?

List<TList> MyList ; // contains 1000 rows 
MyWCFclient svc = new MyWCFclient; 

foreach (var g in MyList){ 
    g.field1inMyList = svc.getCalc(g.field2inMyList) 
} 

svc.Close(); 

pourrait être une bonne mise en œuvre de réutiliser une méthode WCF de cette façon, les performances etc?

Répondre

2

Chaque invocation de getMyInt serait sa propre conversation séparée, avec un peu de surcharge à chaque appel. Donc non, ce ne serait pas une bonne implémentation si vous aviez en fait une boucle qui invoquait rapidement 1000 fois d'affilée getMyInt. Cependant, comme votre exemple est un peu artificiel (il n'atteint/ne renvoie rien), il est difficile de suggérer la meilleure façon de l'améliorer.

Modifier: Je peux voir à partir de vos modifications que vous avez une liste d'objets contenant deux propriétés. Vous utilisez le service Web pour dériver l'une des valeurs de l'autre. Par conséquent, la manière la plus optimale de résoudre ce problème, serait de passer toutes les valeurs au service Web à la fois, comme suit:

List<TList> MyList ; // contains 1000 rows 
MyWCFclient svc = new MyWCFclient; 

var field2Values = MyList.Select(x => x.field2inMyList).ToArray(); 
var field1Values = svc.getCalc(field2Values); 

for (int i = 0; i < field1Values.Length; i++) 
{ 
    MyList[i].field1inMyList = field1Values[i]; 
} 

svc.Close(); 

Les deux field2Values et field1Values sont des tableaux et il n'y a qu'un seul appel à le service WCF.

+0

Kirk voir mon code j'ai mis à jour .. Thnak vous pour votre aide – user450191

+0

@ user450191, a modifié la réponse en fonction de vos modifications. –

0

Vous pouvez créer une version "en bloc" de cette opération de service pour lui permettre de prendre une liste en tant que paramètre (MyList dans ce cas). Cette nouvelle opération appelle alors la même logique métier pour chaque élément et renvoie les résultats dans leur ensemble.

Cela devrait réduire les frais généraux. Mais n'oubliez pas d'adapter les paramètres de configuration de Max * MessageSize pour faire face aux messages potentiellement importants impliqués dans ce cas.