2010-11-19 9 views
1

Je suis en train d'examiner du code dans lequel nous avons eu des problèmes avec les données de retour d'un service Web WCF. Actuellement, le service crée une liste d'objets, les sérialise (sous forme de JSON pour l'enregistrement) et renvoie la liste sérialisée complète sur le réseau. Évidemment, lorsqu'il y a beaucoup de données, les utilisateurs rencontrent des problèmes de limite de quota.WCF Services, quoi de mieux, une grosse demande ou beaucoup de petits?

Je considère le changement ainsi le service renvoie un article à la fois qui enverrait un tas de demandes sur une boucle ajoutant un objet à la fois dans la liste jusqu'à ce qu'il ait été fait. Il est évident que dans le premier scénario, nous faisons une demande au service qui a le potentiel de renvoyer une quantité massive de données et de fonctionner par rapport au quota. Dans l'autre scénario, nous n'atteignons jamais le quota, mais l'application demandera des éléments de données après l'élément de données dans un flux de demandes distinctes. Pour illustrer nous avons une liste d'articles qui viennent dans une variété de types d'articles et ces types viennent à une variété de points de prix. L'application peut vouloir agréger un certain nombre d'articles, les clients qui veulent cet article, les types d'article et le prix demandé par le client et leur pourrait être peut-être soixante-dix articles avec entre cinq et quatre-vingts clients demandant chacun en moyenne deux types de produits à 1 prix chacun. En prenant des moyennes à l'extrémité extrême, cela pourrait faire 7000 demandes de données séparées (très petites) dans un seul travail complet. Est-ce un problème? Il est possible de l'empaqueter un peu pour que les types de clients et les prix demandés puissent être regroupés, mais cela représente potentiellement quelques milliers de demandes en même temps. Suis-je mieux avec un flux de données énorme unique? Ou un couple de milliers de plus petits?

Répondre

2

Vous êtes mieux avec le retour de taille optimale pour votre scénario :) Cela dépend un peu de la surcharge sur la demande. En règle générale, le moins bavarder vers un service Web le mieux.

Réponse facétieuse, alors voici le problème: Vous êtes probablement mieux avec une sorte de système de pagination, où votre demande demande un nombre spécifique d'éléments, et votre réponse renvoie un "n de m" dans les résultats . De cette façon, vous pouvez ajuster le nombre de requêtes et la taille de la réponse pour obtenir les meilleurs résultats dans votre situation.

+0

C'est une bonne idée. Je peux bien envisager de le faire de cette façon ... –

+0

Ne perdez pas courage à propos de moi en acceptant cela comme réponse. Je suis juste en train de mettre un peu de temps à mettre en œuvre, mais jusqu'à présent cela semble bon. –