2009-12-01 7 views
10

J'utilise WCF en communication entre un serveur et un client (tous deux écrits en C#). En mode de libération, les délais devraient être réglés à ~ 20 secondes, mais en mode de débogage, je veux les définir à une valeur plus élevée afin que je puisse déboguer/étape dans mon code sans le délai d'attente.Définir par programme le délai d'attente WCF en mode débogage

Je sais que je peux changer les délais d'attente en modifiant le fichier app.config. Cependant, j'ai deux bindings différents et 4 valeurs de timeout dans chacun, donc je devrais changer à plusieurs endroits, et il est facile d'oublier.

Pour résoudre ce problème, j'aimerais avoir une petite section #if DEBUG dans mon code, qui permette de programmer les valeurs de timeout à 1 heure.

J'ai essayé d'utiliser le code suivant pour ce faire:

Configuration configuration = 
     ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ServiceModelSectionGroup serviceModel = 
     ServiceModelSectionGroup.GetSectionGroup(configuration); 

BindingsSection bindings = serviceModel.Bindings; 

foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings) 
{ 
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0); 
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0); 

mais les propriétés * Délai d'attente sont en lecture seule si je reçois une erreur de compilation. Je ne suis pas friand de l'idée de créer des reliures à partir de zéro par programmation. Si je change certains des attributs dans le app.config, je dois me rappeler de faire le même changement dans le code pour m'assurer que le comportement de débogage est semblable au comportement de libération (excepté les délais d'attente ..)

Quelqu'un a un bon conseil sur la façon de gérer cela?

Répondre

12

Vous pouvez effectuer les opérations suivantes:

  • créer la liaison et le point final dans le code
  • définir les délais d'attente sur l'instance de liaison
  • puis créez votre proxy client à l'aide de ces deux éléments

Quelque chose comme:

BasicHttpBinding myBinding = new BasicHttpBinding("ConfigName"); 
myBinding.CloseTimeout = ....... 
myBinding.OpenTimeout = ....... 
myBinding.ReceiveTimeout = ....... 
myBinding.SendTimeout = ....... 

EndpointAddress myEndpoint = new EndpointAddress("http://server:8181/yourservice"); 

YourServiceClient proxy = new YourServiceClient(myBinding, myEndpoint); 

De cette façon, vous pouvez tirer parti de la configuration de base lors de la description des délais d'attente de liaison et pourtant vous pouvez modifier les paramètres que vous voulez et créer votre proxy client à partir de celui-ci.

2

Vous pouvez créer une seconde liaison dans le fichier web.config et définir un sendTimeout plus long.

 if (debug) 
     { 
      proxy = new MyClient("WSHttpBinding_MyLocal"); 
     } 
     else 
     { 
      proxy = new MyClient("WSHttpBinding_MyDev"); 
     } 

     <wsHttpBinding> 
      <binding name="WSHttpBinding_MyLocal" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:20:00" 

...

+0

Dans un 'Client', le seul délai d'attente la plupart des gens auront besoin est le' sendTimeout' https://social.msdn.microsoft.com/Forums/vstudio/en- US/84551e45-19a2-4d0d-bcc0-516a4041943d/explication de types de temporisations différentes –

Questions connexes