2010-11-09 10 views
13

J'ai développé une application Silverlight en utilisant WCF.La requête HTTP vers * .svc a dépassé le délai imparti. Le temps alloué à cette opération peut avoir été une partie d'un délai d'attente plus long.

Le problème est que parfois il jette une exception indiquant:

« La requête HTTP à « http: // localhost: 1276/Foo.svc » a dépassé le délai imparti Le temps alloué à cette opération peut. ont été une partie d'un délai d'attente plus long. "

Alors, comment puis-je augmenter le délai? Certains ont suggéré l'utilisation de recevoir le temps comme ci-dessous dans la configuration web et dans le fichier de configuration service.client

<bindings> 
     <customBinding > 
     <binding name="customBinding0" receiveTimeout="02:00:00" > 
      <binaryMessageEncoding maxReadPoolSize="2147483647" maxWritePoolSize="2147483647" maxSessionSize="2147483647" /> 


      <httpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" transferMode="Buffered"/> 

     </binding> 
     </customBinding>  
    </bindings> 

quelle serait la valeur maximale de la propriété ReceiveTimeout?

Répondre

19

J'imagine que le problème n'est pas que votre ReceiveTimeout dépasse la valeur maximale pour ce paramètre, car la valeur MaxValue d'un TimeSpan est supérieure à 10 millions de jours. Au lieu de cela, je pense que les paramètres ne prennent tout simplement pas effet.

Vous devriez essayer d'augmenter les valeurs de délai d'attente sur le serveur et le côté client par this blog post:

Sur le serveur (dans votre web.config)

<binding name="customBinding0" receiveTimeout="00:10:00" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00"> 

Sur le client (dans votre ServiceReferences.ClientConfig)

<binding name="CustomBinding_DesignOnDemandService" receiveTimeout="00:10:00" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00"> 
3

La requête HTTP à a dépassé le délai imparti. Le temps alloué à cette opération peut avoir été une partie d'un délai d'attente plus long.

Trois endroits pour définir les valeurs de temps pour résoudre ce problème ...

  1. Web.Config

    <httpRuntime executionTimeout="600" /> 
    

    (ce qui est seconde, alors voici c'est 10min). Plus d'infos sur httpRuntime ici.

  2. Sur votre web.config de reliure

    <binding name="customBinding123"  receiveTimeout="00:10:00"  sendTimeout="00:10:00"  openTimeout="00:10:00"  closeTimeout="00:10:00" /> 
    
  3. Sur vos éléments de liaison à ServerReferences.ClientConfig dans le system.serviceModel

    <binding name="CustomBinding"  receiveTimeout="00:10:00"  sendTimeout="00:10:00"  openTimeout="00:10:00"  closeTimeout="00:10:00" /> 
    
+1

Toutes les liaisons dans web config, client config ainsi que executionTimeout sont définies sur 10 minutes, mais je reçois toujours le timeout à exactement 1 minute. – maplemale

1

Il y a quelques jours nous avons eu la même erreur message. J'ai trouvé ce fil, mais avant de commencer à augmenter les différentes propriétés de timeout, nous avons vérifié le logiciel antivirus de la machine client: c'était NOD. Le NOD plus récent (et peut-être d'autres AVs) a une possibilité de filtre/bloc de port. Nous avons désactivé le blocage du port 80/443 et le client s'est connecté sans aucun message d'erreur d'expiration.