2010-04-29 6 views
1

Avant qu'un client ne reçoive la pleine charge utile de la requête Web, nous souhaitons d'abord lui envoyer une mesure de la taille de la réponse qu'il obtiendra. Si la réponse est trop grande, le client présentera un message à l'utilisateur en lui donnant l'option d'annuler l'opération.Existe-t-il un moyen intégré de déterminer la taille d'une réponse WCF?

Nous pouvons écrire du code personnalisé pour précharger la réponse sur le serveur, déterminer la taille, puis la transmettre au client, mais nous préférerions qu'il n'y ait pas d'autre moyen de le faire.

Est-ce que quelqu'un sait si WCF a une manière compliquée de le faire? Ou y a-t-il des outils tiers gratuits pour accomplir cela?

Merci.

Répondre

0

Je ne pense pas qu'il y ait quelque chose de "compliqué" dans WCF ou dans l'infrastructure .NET à le faire, vraiment. Que renvoyez-vous au client? Une instance d'une classe? Ce que vous pouvez faire est d'exécuter la requête ou de récupérer la réponse, puis de la sérialiser dans un flux mémoire et de voir à quel point elle est importante. Ce ne sera pas une taille tout à fait exacte - les messages SOAP ont un peu de surcharge, comme l'enveloppe SOAP et les en-têtes et autres choses - mais cela peut vous donner une idée approximative de si vous êtes sur le point de retourner quelques centaines d'octets, ou quelques mégaoctets.

Problème: cela peut prendre un certain temps sur le serveur pour assembler/interroger, puis pour "mesurer" également. De plus, vous auriez presque besoin d'avoir deux appels - un à "MeasureResult" qui renvoie un Int ou Long ou quelque chose, puis un second appel "GetResult" pour obtenir réellement les résultats. Vous devrez donc faire l'effort d'assembler le message deux fois ...

Je n'ai pas vraiment de bonne réponse pour vous, mais peut-être avez-vous besoin de trouver une autre façon de permettre au client d'abandonner appelez si cela prend trop de temps. Ou trouver un moyen de déterminer plus rapidement un indicateur de l'ampleur de la réponse (sans obtenir tous les détails de la réponse elle-même).

+0

Toutes sont de bonnes suggestions. Nous avons fini par éviter complètement le problème et simplement envoyer un message à l'utilisateur du côté de l'interface utilisateur si le téléchargement des données prenait plus de n secondes. Pas la solution la plus robuste, mais il était évidemment beaucoup plus facile que d'écrire un tas de code côté serveur qui ralentirait le processus encore plus loin et fournirait encore une approximation à la fin. – jaminto