2009-06-11 7 views
6

Wie kann ich den Effekt jeder WCF-Timeout-Einstellung testen? Ich möchte sicherstellen, dass ich gute Werte auswähle, und ich möchte auch sicherstellen, dass mein Ausnahmebehandlungscode solide ist.Wie testen WCF Timeout-Einstellungen?

Ich erstellte Client-Programm und einen Server WCF-Dienst, um die Timeout-Einstellungen zu testen. In meiner Service-Implementierung habe ich einen Thread.Sleep (5000) hinzugefügt. Auf der Clientseite ist sendTimeout die einzige Einstellung, die eine Zeitüberschreitung verursacht.

Egal welchen Wert ich in allen anderen Einstellungen verwende, die Zeitüberschreitung tritt nie auf. Wie kann ich alle anderen Einstellungen testen?

Hier sind die Einstellungen, die ich würde testen, wie: Sendtimeout, ReceiveTimeout, Close, Opentimeout und InactivityTimeout (in reliableSessions).

Bearbeiten 19 Feb 2009: Diese Änderung dient nur dazu, anzuzeigen, dass ich immer noch keinen Weg zum Unit-Test der WCF-Timeout-Einstellungen gefunden habe.

Antwort

1

Wenn Sie an der richtigen Stelle suchen, können Sie die Kanalereignisse erhalten und ändern Sie Ihren Test von ihnen bewusst zu sein. Connect ist eine boolesche Methode für den WCF-Dienst. Ich benutzte Svcutil, um eine Proxy-Klasse mit Async-Methoden zu generieren.

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) 
{ 

} 

Ich hoffe, das bietet Ihnen einen gewissen Wert.

+0

Hallo Chris, danke für deine Antworten. Das ist nützlich, um die Kanal-Ereignisse zu verfolgen, aber das hilft mir nicht, die Timeout-Ausnahmen zu verursachen. Ich muss wirklich die Timeout-Ausnahmen verursachen, um zu beweisen, dass mein Fehlerbehandlungscode korrekt ist. – Sylvain

+0

Mir ist kein Code bekannt, der eine Zeitüberschreitung erzwingen kann, aber Sie könnten Ihre Werte löschen, um sie einfacher auszulösen. –

+1

Hallo Chris, das habe ich gemacht; Ich habe alle Timeout-Werte auf 1 Sekunde auf beiden Seiten (Client/Service) fallen gelassen. Die einzige wirksame Einstellung ist sendTimeout, die vom Client ausgelöst wurde. Alle anderen Timeout-Einstellungen sind wirkungslos, weshalb ich diese Frage posten muss. Wie soll ich gute Werte auswählen und sicherstellen, dass ich einen guten Timeout-Code habe, wenn es nicht möglich ist, jede Art von Timeout in einer kontrollierten Umgebung zu reproduzieren? – Sylvain