Augmentation de la valeur de délai d'attente dans un service WCF

Comment augmenter le délai d'attente par défaut à plus de 1 minute sur un service WCF?

121
wcf
demandé sur Blankman 2009-01-08 17:12:39

5 réponses

Faites-vous référence au côté serveur ou au côté client?

Pour un client, vous souhaitez ajuster la sendTimeout attribut d'un élément de liaison. Pour un service, vous souhaitez ajuster l'attribut receiveTimeout d'un élément de liaison.

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="longTimeoutBinding"
        receiveTimeout="00:10:00" sendTimeout="00:10:00">
        <security mode="None"/>
      </binding>
    </netTcpBinding>
  </bindings>

  <services>
    <service name="longTimeoutService"
      behaviorConfiguration="longTimeoutBehavior">
      <endpoint address="net.tcp://localhost/longtimeout/"
        binding="netTcpBinding" bindingConfiguration="longTimeoutBinding" />
    </service>
....

Bien sûr, vous devez mapper votre point de terminaison souhaité à cette liaison particulière.

180
répondu icelava 2013-08-20 10:39:33

Dans le menu Outils de Visual Studio 2008 (ou 2005 si vous avez installé les bons éléments WCF), il existe une option appelée 'WCF Service Configuration Editor'.

A partir de là, vous pouvez modifier les options de liaison pour le client et les services, l'une de ces options sera pour les délais d'attente.

40
répondu Kieron 2009-01-08 14:21:52

Différents délais d'attente signifient différentes choses. Lorsque vous travaillez sur le client.. vous regardez probablement surtout le SendTimeout-Vérifiez cette référence-explication merveilleuse et pertinente: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/

8
répondu Arvind Gautam 2010-08-05 18:14:05

, Vous pouvez choisir deux façons:

1) par code dans le client

public static void Main()
{
    Uri baseAddress = new Uri("http://localhost/MyServer/MyService");

    try
    {
        ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));

        WSHttpBinding binding = new WSHttpBinding();
        binding.OpenTimeout = new TimeSpan(0, 10, 0);
        binding.CloseTimeout = new TimeSpan(0, 10, 0);
        binding.SendTimeout = new TimeSpan(0, 10, 0);
        binding.ReceiveTimeout = new TimeSpan(0, 10, 0);

        serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);
        serviceHost.Open();

        // The service can now be accessed.
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();

    }
    catch (CommunicationException ex)
    {
        // Handle exception ...
    }
}

2) par WebConfig dans un serveur web

<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding openTimeout="00:10:00" 
                 closeTimeout="00:10:00" 
                 sendTimeout="00:10:00" 
                 receiveTimeout="00:10:00">
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

Pour plus de détails voir les documentations officielles

Configuration des valeurs de délai d'attente sur une liaison

Classe WSHttpBinding

4
répondu daniele3004 2017-01-18 14:48:30

En plus des délais d'attente de liaison (qui sont dans Timespans), vous pouvez également en avoir besoin. C'est en quelques secondes.

<system.web>
    <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
0
répondu Derreck Dean 2018-06-04 18:43:28