2011-02-22 1 views
1

Je tente de générer beaucoup d'utilisateur dans ma base de données en utilisant un service WCF en utilisant une boucle. Le script et le service Web s'exécutent localement (Cassini).WCF ne répond pas lors de l'appel dans une boucle

   FormWCFClient formClient = new srForm.FormWCFClient(); 
       User user; 
       int nbUser = 20000; 
       for (int i = 0; i < nbUser; ++i) 
       { 
        user = new User(); 
        user.Email = String.Format("{0}@example.com", i.ToString()); 

        formClient.AddUser(user); // Add the user in DB 
       } 

       formClient.Close(); 

Le problème est que près de 3300 appelle un EndpointNotFoundException est lancé avec la innerException suivante: « Impossible de se connecter au serveur distant ».
Je dois attendre environ 20 secondes pour pouvoir continuer le processus sans erreur (jusqu'à la prochaine série de 3300 appels).

Est-ce un problème de code ou une limitation du serveur?

+0

Et si vous ajoutez une méthode AddUsers(), qui accepte un 'IEnumerable ' et appelez le service par lots de 3000 à la fois? Avez-vous le même problème? – Nate

Répondre

0

Vous pouvez créer une nouvelle opération dans votre service qui prend en paramètre une liste d'utilisateurs. Ensuite, vous l'appelez une fois avec la liste au lieu d'appeler l'opération existante 20000 fois avec un utilisateur. Cela réduirait la charge sur le réseau et faciliterait l'utilisation des transactions.

Si cela est impossible, activez WCF tracing et vérifiez ce qui se passe en cas d'échec de l'appel.

+0

Ce n'est pas une mauvaise idée mais je fais face à un autre problème avec cette solution: "Le nombre maximum d'éléments qui peuvent être sérialisés ou désérialisés dans un graphe d'objet est ...". Je sais que je peux augmenter le maximum mais ce n'est pas une solution élégante. De plus, le suivi WCF ne signale aucune erreur lors de l'appel du service plusieurs fois. – Spilarix