web-dev-qa-db-fra.com

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?

123
Blankman

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

Pour un client, vous voudrez ajuster l'attribut sendTimeout d'un élément de liaison. Pour un service, vous voudriez ajuster l'attribut receiveTimeout d'un élément contraignant.

<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 entendu, vous devez mapper le point de terminaison souhaité sur cette liaison particulière.

184
icelava

Dans le menu Outils de Visual Studio 2008 (ou 2005 si vous disposez des éléments WCF appropriés), une option appelée "Éditeur de configuration de service WCF" est proposée.

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

42
Kieron

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

8
Arvind Gautam

Vous pouvez choisir deux manières:

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 sur 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
daniele3004

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

<system.web>
    <httpRuntime executionTimeout="600"/><!-- = 10 minutes -->
0
Derreck Dean