J'essaie d'obtenir une liste d'entités d'un service de WCF, le problème que je connais est que nous avons une mauvaise latence sur le réseau et que les données prennent donc une durée considérable pour accéder à mon client. L'idée que j'ai est de trouver un moyen d'obtenir le premier 1000 et de pousser ceux-ci à l'interface utilisateur pendant que j'attends que les prochains arrivent. P>
Je suppose que ce serait comme une pagination mais je veux juste que la page complète dans la couche de WCF plutôt que d'obtenir une page à la fois de la DB p>
acclamations p>
3 Réponses :
Vous pouvez toujours diviser votre interface de service en deux méthodes. Par exemple, au lieu de: Vous pouvez avoir: p> de sorte que vous puissiez mettre en œuvre la pagination manuellement. P> p>
Quelle serait la meilleure façon de "cacher" cette liste du côté du service?
Cela dépend de votre couche de persistance. Par exemple, Nhibernate fera la mise en cache automatiquement, tant que vous partagez la session entre les demandes. (En réalité, il a un cache de deux couches et de nombreuses options). Si vous utilisez un autre cadre, vous devez examiner leur documentation. Si vous utilisez directement SQL, cela pourrait être un bon moment pour regarder ceux-ci.
Nous utilisons directement le SQL et la commutation n'est pas une option, je connais déjà la bonté de NHibernate, mais nous avons des contraintes imposées par notre client non pour l'utiliser ...
WCF examine le message à son intégralité avant de le remettre à des niveaux plus élevés. Par conséquent, vos données doivent arriver dans des contrats de WCF complets et habituels ne fonctionneront pas. P>
Cependant, vous pouvez utiliser streaming avec wcf . Cela permet de lire progressivement la charge utile du flux et être transmis aux niveaux plus élevés. Afin de le faire fonctionner, vous devez: P>
Ce sera
Pas de lien à nouveau. Je viens de vérifier IE 6 (PC de travail) et j'utilise Chrome. J'étais un peu inquiet que c'était le navigateur qui brise quelque chose, mais c'est la même chose dans les deux.
Merci Ian. Je suis en fait mort-malade et au lit afin que cela ait été mon problème :)
Je pense que cela vaut la peine d'essayer, je vais jouer un peu et voir comment ça se passe, idéalement, je veux réaliser quelque chose où cela est résumé et je n'ai pas besoin de vous inquiéter du côté du client de la façon dont cela fonctionne en interne
Si vous implémentez le streaming lorsque vous exposez simplement un flux, le proxy doit savoir. Bien que vous puissiez créer un proxy personnalisé où vous encapsulez toute la désérialisation.
À la fin, j'utilise TCPTransport pour ma communication, j'ai fini par utiliser des canaux duplex pour faire ce dont j'avais besoin. P>
Qu'est-ce que j'ai fait, c'est juste changer ma recherche actuelle qui renvoyait une grande liste à vide. À l'intérieur de cette méthode, je reçois mes données de la base de données, du morceau et de l'envoyer au client via une opération de rappel p>