2009-06-11 3 views
6

Comment puis-je tester l'effet de chaque paramètre de délai d'attente WCF? Je veux m'assurer que je sélectionne de bonnes valeurs et je veux aussi m'assurer que mon code de gestion des exceptions est solide.Comment tester les paramètres de délai d'attente WCF?

J'ai créé un programme client et un service WCF serveur pour tester les paramètres de délai d'expiration. Dans mon implémentation de service, j'ai ajouté un Thread.Sleep (5000). Côté client, le seul paramètre entraînant un dépassement de délai est sendTimeout.

Quelle que soit la valeur que j'utilise dans tous les autres paramètres, le délai d'attente ne se produit jamais. Comment tester tous les autres paramètres?

Voici les paramètres que je voudrais tester: sendTimeout, receiveTimeout, closeTimeout, openTimeout et inactivityTimeout (dans reliableSessions).

Édition 19 février 2009: Cette modification est juste pour indiquer que je n'ai toujours pas trouvé un moyen de tester les paramètres du délai d'attente WCF.

Répondre

1

Si vous regardez au bon endroit, vous pouvez obtenir les événements de canal et modifier votre test pour être au courant d'entre eux. Connect est une méthode booléenne sur le service WCF. J'ai utilisé svcutil pour générer une classe proxy en utilisant des méthodes asynchrones.

private StateManagerClient _stateManagerClient; 
private InstanceContext _site; 

public New() 
{ 
    _site = new InstanceContext(this); 
    _serviceClient = new ServiceClient(); 
    _serviceClient.ConnectCompleted += ServiceClient_ConnectCompleted; 
} 

private void ServiceClient_ConnectCompleted(object sender, ConnectCompletedEventArgs e) 
{ 
    //Bind to the channel events 
    foreach (IChannel a in _site.OutgoingChannels) { 
        a.Opened += Channel_Opened; 
        a.Faulted += Channel_Faulted; 
        a.Closing += Channel_Closing; 
        a.Closed += Channel_Closed; 
    } 
} 

private void Channel_Opened(object sender, EventArgs e) 
{ 
    
} 

private void Channel_Faulted(object sender, EventArgs e) 
{ 
    
} 

private void Channel_Closing(object sender, EventArgs e) 
{ 
    
} 

private void Channel_Closed(object sender, EventArgs e) 
{ 

} 

J'espère que cela vous apporte une certaine valeur.

+0

Bonjour Chris, merci pour vos réponses. Cela est utile pour suivre les événements de canal, mais cela ne m'aide pas à provoquer les exceptions de délai. J'ai vraiment besoin de provoquer les exceptions de timeout afin de prouver que mon code de gestion des erreurs est correct. – Sylvain

+0

Je ne connais pas de code qui puisse forcer un délai mais vous pouvez supprimer vos valeurs afin de les rendre plus faciles à déclencher. –

+1

Salut Chris, je l'ai fait; J'ai laissé tomber toutes les valeurs de timeout à 1 sec, des deux côtés (client/service). Le seul paramètre efficace est sendTimeout, déclenché par le client. Tous les autres paramètres de délai d'expiration sont inefficaces. C'est la raison pour laquelle je publie cette question. Comment suis-je censé sélectionner de bonnes valeurs et m'assurer que j'ai un bon code de gestion du timeout s'il n'y a aucun moyen de reproduire chaque type de timeout dans un environnement contrôlé? – Sylvain

Questions connexes