Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1519 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  LINQ to sql exception : The underlying connection was closed...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

LINQ to sql exception : The underlying connection was closed...

n°1993973
katopex
Posté le 18-05-2010 à 10:30:22  profilanswer
 

Bonjour,
J'utilise un WebService LINQ to SQL qui effectue simplement une requete dans une base SQL Server.
 
L'exception récupérée est : "The underlying connection was closed: An unexpected error occurred on a receive"
 
Tout fonctionne lorsque la requete retourne peu d'enregistrements, et dans le cas ou elle retourne environ 5000 enregistrements, j'ai mon exception...
 
Voilà mon code côté WebService :

Code :
  1. public IList<MON_TYPE> getRetourRequete(param1, param2...)
  2.         {
  3.             string[] strListCustomerCode = param1.Split(';');
  4.             List<MON_TYPE> listMonType = null;
  5.             try
  6.             {
  7.                 using (monDataContext context = new monDataContext())
  8.                 {
  9.                     foreach (string strCustomCode in strListCustomerCode)
  10.                     {
  11.                         var result = from wo in context.MON_TYPE
  12.                                          where wo.monChamp1 == strCustomCode
  13.                                          where wo.monChamp1.Contains(param2)
  14.                                          where wo.monChamp1.Contains(param3)....
  15.                                          select wo;
  16.                    
  17.                         context.ObjectTrackingEnabled = false;
  18.                         if ((result.ToList<MON_TYPE>() != null) &&
  19.                             (result.ToList<MON_TYPE>().Count > 0))
  20.                         {
  21.                             if (listMonType == null)
  22.                             {
  23.                                 listMonType = new List<MON_TYPE>();
  24.                                 listMonType.AddRange(result.ToList<MON_TYPE>());
  25.                             }
  26.                             else
  27.                             {
  28.                                 listMonType.AddRange(result.ToList<MON_TYPE>());
  29.                             }
  30.                         }
  31.                     }
  32.                 }
  33.             }
  34.             catch (Exception ex)
  35.             {
  36.                 string mess = ex.Message;
  37.                 listMonType = null;
  38.             }
  39.             return listMonType;
  40.         }
  41.     }


Dans un 1er temps le param1 est splitté car il contient plusieurs valeurs pour le même champ. Ma requete est executé plusieurs fois avec ces valeurs et les résultats sont concaténés (c'est un "OU" à ma sauce)
 
côté consommateur du service :

Code :
  1. try
  2. {
  3.       Service monService = new Service();
  4.       IList<MON_TYPE> maList = monService.getRetourRequete(param1, param2...);
  5.       // c'est après ce code que le programme passe en exception coté client uniquement pas d'exception sur le service
  6. }
  7. catch (Exception ex)
  8. {
  9.       // exception récupérée (The underlying connection was closed...)
  10.       string message = ex.Message
  11. }


 
J'ai cherché tout hier, je ne trouve pas d'où ca peut venir, si quelqu'un a une idée ? Merci !


Message édité par katopex le 18-05-2010 à 14:15:37
mood
Publicité
Posté le 18-05-2010 à 10:30:22  profilanswer
 

n°1994102
katopex
Posté le 18-05-2010 à 14:37:42  profilanswer
 

Oui tu as bien très compris le problème ! (j'ai complété mon 1er post)
 
Et en plus grace à ca j'ai résolu mon problème.
 
Dans le fichier Traces.svclog le message était : « Le nombre maximal d’éléments pouvant être sérialisés ou désérialisés dans un graphique d’objet est « 65536 ». Modifiez le graphique d’objet ou augmentez le quota MaxItemsInObjectGraph.  »
 
Du coup j'ai cherché un peu et pour résoudre le problème il fallait préciser dans le web.config pour le "behavior" du service utilisé (dans mon cas : IntegAppsServiceBehavior) une valeur plus haute pour le paramètre MaxItemsInObjectGraph :  

Code :
  1. <system.serviceModel>
  2.  <behaviors>
  3.   <serviceBehaviors>
  4.    <behavior name="UsersServiceBehavior">
  5.     <serviceMetadata httpGetEnabled="true" />
  6.    </behavior>
  7.    <behavior name="IntegAppsServiceBehavior">
  8.     <serviceMetadata httpGetEnabled="true" />
  9.           <dataContractSerializer maxItemsInObjectGraph="100000" />
  10.    </behavior>
  11.   </serviceBehaviors>
  12.     </behaviors>
  13. </system.serviceModel>


 
Par contre je me demande comment être sur d'avoir une valeur qui fonctionne toujours pour ce paramètre (à moins de mettre une valeur très grande mais y a t-il des effets de bord ?...)
 
Merci beaucoup en tout cas pour cette rapide et excellente réponse !


Message édité par katopex le 18-05-2010 à 14:41:58

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  LINQ to sql exception : The underlying connection was closed...

 

Sujets relatifs
[LINQ] LinqToXMLConnection à un annuaire LDAP depuis Access
[MYSQL] procédure stockée, connection à une autre BDconnection pages perso free
[JAVA][RMI] pas de connection du factoryException in thread "main" java.lang.NoClassDefFoundError
Linq to Entities - AutoincrementCodeigniter & ajax : The script tried to execute a method or access a
Conseil / aide pour connection mysql et ASP 
Plus de sujets relatifs à : LINQ to sql exception : The underlying connection was closed...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR