IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

Local socket timeout


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Par défaut Local socket timeout
    Bonjour,

    J'ai un client WPF qui utilise un service WCF afin d'obtenir une Liste d'objets.

    Cette Liste d'objets est obtenue à partir de mon Server SQL via l'Entity Framework. Elle se compose de 3 éléments de petites tailles.

    Le problème est le suivant :

    The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:29:58.9370000'.
    Client :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    using System;
    using System.Collections.Generic;
    using System.ServiceModel;
    using ComInterface;
    using DAL;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Sondage> _sondages;
     
                using (ChannelFactory<IEnregistrement> channelFactory = new ChannelFactory<IEnregistrement>("Enregistrement"))
                {
                    IEnregistrement proxyEnregistrement = channelFactory.CreateChannel();
                    _sondages = proxyEnregistrement.GetSondages();
     
                    foreach (Sondage s in _sondages)
                    {
                        Console.WriteLine(s.Nom);
                    }
                    channelFactory.Close();
                }
                Console.ReadLine();
            }
        }
    }

    Client - App.Config

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0"?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="NetTcpBindingConfig" openTimeout="00:01:00" sendTimeout="00:30:00" closeTimeout="00:30:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"  maxArrayLength="2147483647"  maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <security>
                <transport/>
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
        <client>
          <endpoint contract="ComInterface.IEnregistrement" binding="netTcpBinding" bindingConfiguration="NetTcpBindingConfig" behaviorConfiguration="customQuotaBehaviour" address="net.tcp://localhost:5555/Enregistrement" name="Enregistrement"/>
        </client>
        <behaviors>
          <endpointBehaviors>
            <behavior name="customQuotaBehaviour">
              <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
    </configuration>

    Serveur :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    using ComInterface;
    using System.Collections.ObjectModel;
    using DAL;
     
    namespace ServeurEnregistrement
    {
        public class Enregistrement : IEnregistrement
        {
            public List<Sondage> GetSondages()
            {
                using (var ctx = new dbEntities())
                {
                    var sondages = from s in ctx.Sondages select s;
     
                    return sondages.ToList();
                }
            }
        }
    }


    Serveur - App.config

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?xml version="1.0"?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netTcpBinding>
            <binding name="NetTcpBindingConfig" openTimeout="00:01:00" sendTimeout="00:30:00" closeTimeout="00:30:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"  maxArrayLength="2147483647"  maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <security>
                <transport/>
              </security>
            </binding>
          </netTcpBinding>
        </bindings>
        <services>
          <service name="ServeurEnregistrement.Enregistrement">
            <endpoint contract="ComInterface.IEnregistrement" binding="netTcpBinding" bindingConfiguration="NetTcpBindingConfig" address="net.tcp://localhost:5555/Enregistrement"/>
          </service>
        </services>
      </system.serviceModel>
      <connectionStrings>
        <add name="dbEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=STEVEN-PC\SQLEXPRESS;Initial Catalog=db_sysrep;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

    J'ai essayé de modifier le open/send/close timeout, les buffers et j'ai toujours l'erreur !

    Si la méthode : GetSondages return un INT, cela fonctionne... Mais dès que c'est une liste, une observableCollection j'ai l'erreur Communication.

    Merci de votre aide,
    S

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Krustig Voir le message
    J'ai essayé de modifier le open/send/close timeout, les buffers et j'ai toujours l'erreur !
    Essaie de jouer sur les valeurs de receiveTimeout pour voir ce que cela donne.

    Si ça ne change rien, tu peux aussi changer la valeur de la proprieté OperationTimeout de ton IChannelContext, après création dynamique de ton proxy:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    using System.Collections.Generic;
    using System.ServiceModel;
    using ComInterface;
    using DAL;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Sondage> _sondages;
     
                using (ChannelFactory<IEnregistrement> channelFactory = new ChannelFactory<IEnregistrement>("Enregistrement"))
                {
                    IEnregistrement proxyEnregistrement = channelFactory.CreateChannel();
                    (service as IContextChannel).OperationTimeout = New TimeSpan(0, 0, 240);
                    _sondages = proxyEnregistrement.GetSondages();
     
                    foreach (Sondage s in _sondages)
                    {
                        Console.WriteLine(s.Nom);
                    }
                    channelFactory.Close();
                }
                Console.ReadLine();
            }
        }
    }

    Dans le code ci-dessus, j'ai mis la valeur à 240 secondes soit 4 minutes.
    Dernière modification par Invité ; 22/01/2011 à 11h08.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Par défaut
    Merci pour ton aide.

    J'ai tenter de jouer avec le receiveTimeout mais sans succes...

    Concernant l'OperationTimeout, tu as mis service.
    Cela correspond au proxy ? Est-ce correcte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using (ChannelFactory<IEnregistrement> channelFactory = new ChannelFactory<IEnregistrement>("Enregistrement"))
                {
                    IEnregistrement proxyEnregistrement = channelFactory.CreateChannel();
                    (proxyEnregistrement as IContextChannel).OperationTimeout = new TimeSpan(0, 0, 240);                _sondages = proxyEnregistrement.GetSondages();
    
                    foreach (Sondage s in _sondages)
                    {
                        Console.WriteLine(s.Nom);
                    }
                    channelFactory.Close();
                }
    Merci de ton aide :=

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Krustig Voir le message
    Concernant l'OperationTimeout, tu as mis service.
    Cela correspond au proxy ? Est-ce correcte ?
    correcte .
    et ça marche ?

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    correcte .
    et ça marche ?
    Non

    Je comprends pas pourquoi...

    Si je passe un simple String, un Int cela fonctionne mais tous ce qui est List, ObservableCollection, ... non

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Krustig Voir le message
    Si je passe un simple String, un Int cela fonctionne mais tous ce qui est List, ObservableCollection, ... non
    Une question bête : est-ce que tu exposes ta classe Sondage en tant que contrat de données en utilisant les attributs DataContract et DataMember ?
    Si ça marche avec les types intégrés et non avec ta classe, c'est qu'il y a un truc qui cloche avec ta classe Sondage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete http / Connexion socket / Timeout
    Par Harry_Tauper dans le forum Débuter
    Réponses: 8
    Dernier message: 19/10/2009, 11h38
  2. Requete http / Connexion socket / Timeout
    Par Harry_Tauper dans le forum Développement
    Réponses: 0
    Dernier message: 14/10/2009, 11h06
  3. [Web Service] socket timeout : read timed out
    Par AlexC3301 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 29/04/2009, 00h51
  4. [Socket] timeout recv
    Par zenux dans le forum C++
    Réponses: 2
    Dernier message: 11/03/2006, 17h27
  5. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum Développement
    Réponses: 2
    Dernier message: 30/12/2003, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo