0 votes

Exception WCF - "Service non trouvé" lors de la récupération d'une grande collection

mon service WCF est utilisé par une application Silverlight pour récupérer des données. Je n'ai aucun problème,

    [OperationContract]
MyCollectionClass GetList(int sessID, string name);

  [CollectionDataContract]
public class MyCollectionClass : List<MyClass>{ }

  [DataContract]
public class MyClass {

  [DataMember]
  public string Prop1 { get; set; }

  [DataMember]
  public string Prop2 { get; set; }

}

Mais lorsque MyCollectionClass a un nombre d'enregistrements inférieur à 3000+, cela fonctionne. Lorsque le nombre d'enregistrements est supérieur, le service WCF semble fonctionner, mais lors de l'événement "completed" de l'application Silverlight, une exception se produit : "Service Not Found".
J'ai trouvé que cela pouvait être lié à la configuration du service et j'ai essayé d'utiliser les deux :

maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"

sur la configuration de WCF et du client. Ajouté également :

readerQuotas: 
  maxArrayLength="2000000" 
  maxStringContentLength="2000000"/>

(j'ai également modifié les valeurs trouvées), mais il semble que cela ne fonctionne pas. Je pense que le problème est que le message dépasse le nombre maximum d'octets par "message", mais je ne comprends pas pourquoi les données ne sont pas réparties sur les différents messages.
Tous les conseils sont les bienvenus.

Giorgio

1voto

Braulio Points 876

J'ai eu le même problème, dans mon cas je ne sérialisais qu'une chaîne de caractères et il n'y avait pas de problème, MAIS dans votre cas vous sérialisez un grand nombre d'objets, il y a une limite par défaut pour cela, je me souviens avoir vu un post à ce sujet (juste un paramètre dans la configuration --> maxItemsInObjectGraph) pour augmenter le nombre d'objets sérialisés,

Liens

http://silverlight.net/forums/t/17674.aspx http://forums.asp.net/t/1330713.aspx

Paramètres :

H Braulio

0voto

Nikolay R Points 771

Essayez d'activer la journalisation du service wcf du côté du serveur. Cela pourrait aider : http://msdn.microsoft.com/en-us/library/ms730064.aspx

0voto

Bill Points 86

J'utilise ces deux instructions juste après InitializeComponent :

binding.MaxReceivedMessageSize = 5000000 binding.MaxBufferSize = 5000000

Vous pouvez changer les chiffres à votre guise, mais j'ai dû le faire pour recevoir une grande quantité de données sur le client Silverlgiht. Mon objet de liaison est défini comme suit :

Private binding As New BasicHttpBinding

C'est en vb.net. Cela fonctionne comme un charme une fois que j'ai inclus ces éléments.

0voto

0voto

Juan Carlos Velez Points 717

J'utilise silverlight 4 et vs 2010, et j'ai eu le même problème, que j'ai résolu en modifiant le fichier web.config.

Mon fichier web.config original contenait :

<system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Et je l'ai modifié par :

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <behaviors> 
         <serviceBehaviors> 
             <behavior> 
                 <serviceMetadata httpGetEnabled="true"/> 
                 <serviceDebug includeExceptionDetailInFaults="true"/> 
                 <dataContractSerializer maxItemsInObjectGraph="2147483647"/>  <!--this very is important: it is the size of the buffer-->
             </behavior> 
         </serviceBehaviors> 
     </behaviors>
  </system.serviceModel>

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