2010-04-13 5 views
3

Je suis entré dans un projet qui utilise un service WCF pour le niveau de données. Actuellement, lorsque des données sont nécessaires pour une grille, toutes les lignes sont renvoyées et les résultats sont liés à une grille et l'ensemble de données est inséré dans une variable de session pour la pagination/le tri/la reliaison. Nous avons déjà rencontré un problème de taille de message maximale, donc je pense qu'il est temps de convertir depuis fetch et cache pour récupérer seulement la page en cours.Résultats de pagination WCF et exportation de données

Valeur faciale cela semble assez facile, mais il y a un petit attrapé. L'utilisateur est autorisé à exporter l'intégralité du jeu de résultats à tout moment. Cela signifie que, pour la visualisation de la grille, l'extraction de la page en cours est correcte, mais quand ils veulent faire une exportation, j'ai toujours besoin de faire un appel pour toutes les données. Cela me ramène au problème de la taille maximale des messages. Quelle est l'approche recommandée pour ce type d'installation?

Nous utilisons actuellement la wsHttpBinding ...

Merci pour toute aide.

Répondre

2

Je pense que l'approche recommandée pour les fichiers volumineux consiste à utiliser le streaming WCF. Je ne suis pas sûr que les détails exacts de votre scénario, mais vous pouvez jeter un oeil à cela comme un point de départ:

http://msdn.microsoft.com/en-us/library/ms789010.aspx

2

je ferais probablement quelque chose comme ça dans votre cas

  • créer un service avec une méthode "paged" GetData() - où vous spécifiez l'index de la page et la taille de la page en tant que paramètres supplémentaires. Cela devrait vous donner une bonne interface propre pour une utilisation "normale", et cela ne devrait pas atteindre les limites de maxMessageSize

  • créer un second service (ou méthode) qui enverrait toutes les données - idéalement, vous pourriez regrouper cela dans un Fichier ZIP ou quelque chose sur le serveur, avant de l'envoyer. Si ce fichier ZIP est encore trop grand, vous voudrez peut-être vérifier WCF en streaming pour le traitement de gros fichiers, comme Andy a déjà signalé

Le maxMessageSizeLimit est en place pour une bonne raison: pour éviter des attaques par déni de service où un service WCF serait tout simplement inondé de gros messages et ainsi mis à genoux. Si vous le pouvez, essayez toujours de garder cela à l'esprit et ne vous contentez pas de monter le maxMessageSize à 2 Go - il pourrait revenir vous mordre :-)

Questions connexes