3 votes

comment contourner la limite de taille des messages par défaut dans le service de données WCF

J'ai rencontré un problème avec mon service de données WCF. L'une des tables contient trop de données à renvoyer (environ 80 champs) pour que la taille limite soit dépassée par un seul enregistrement (plus de 60 000 selon une estimation, je ne peux pas le dire avec précision car le message ne peut pas être vu en raison de l'interruption de la sortie du message).

Jusqu'à présent, j'ai constaté que l'on peut contourner ce problème de deux manières.

  • Pour augmenter la limite de taille des messages.
  • Pour changer le format de transfert des données en Json.

Pour les deux solutions, il y a des problèmes à surmonter.

  • Il y a beaucoup d'articles sur le web expliquant comment configurer le service WCF pour changer la taille du tampon ou le quota de lecteur. Mais je ne sais pas comment le service de données WCF fonctionne parce que les documents officiels n'ont pas montré comment configurer le service de données WCF déclarativement. Le service de données WCF supporte-t-il les mêmes métaphores de configuration ? Et comment le réaliser ?

  • La bibliothèque client du service de données WCF ne semble pas supporter le format json. Je dois mettre en œuvre les mêmes fonctions par moi-même. Ma question est la suivante : existe-t-il un analyseur de données json en C# ?

1voto

Pour le problème n°1, consultez le sujet Fournisseur de streaming (services de données WCF) qui comprend cette configuration WCF pour permettre l'envoi de messages volumineux vers et depuis un service OData à l'aide des services de données WCF :

 <system.serviceModel>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
 <services>
     <!-- The name of the service -->
     <service name="PhotoService.PhotoData">
         <!--you can leave the address blank or specify your end point URI-->
         <endpoint binding="webHttpBinding" 
           bindingConfiguration="higherMessageSize" 
           contract="System.Data.Services.IRequestHandler"></endpoint>
     </service>
 </services>
 <bindings>
     <webHttpBinding>
         <!-- configure the maxReceivedMessageSize value to suit the max size of 
                  the request (in bytes) you want the service to receive-->
         <binding name="higherMessageSize" transferMode="Streamed"  
          maxReceivedMessageSize="2147483647"/>
     </webHttpBinding>
 </bindings>

Pour le problème #2, le client WCF Data Services ne supporte pas JSON, seulement Atom XML. Avez-vous essayé le post Utiliser System.Json pour des projets non-Silverlight ? qui semble avoir des informations utiles sur d'autres alternatives pour analyser le JSON d'un service de données sur le client.

1voto

Roy Dictus Points 19568

Pour utiliser JSON avec les services de données WCF, vous avez besoin du WCF Data Services Toolkit, téléchargeable gratuitement à l'adresse suivante http://wcfdstoolkit.codeplex.com .

Cela permet d'ajouter l'option "$format=json" à la fin de vos requêtes REST, comme dans :

http://myservice/Products?$format=json

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X