2009-06-11 11 views
6

Come posso testare l'unità l'effetto di ogni impostazione di timeout di WCF? Voglio assicurarmi di selezionare buoni valori e voglio anche assicurarmi che il mio codice di gestione delle eccezioni sia solido.Come testare le impostazioni di timeout di WCF?

Ho creato un programma client e un servizio WCF del server per testare le impostazioni di timeout. Nella mia implementazione del servizio, ho aggiunto un Thread.Sleep (5000). Sul lato client, l'unica impostazione che determina un timeout è sendTimeout.

Indipendentemente dal valore che utilizzo in tutte le altre impostazioni, il timeout non si verifica mai. Come testare tutte le altre impostazioni?

Ecco le impostazioni che vorrei testare: sendTimeout, receiveTimeout, closeTimeout, openTimeout e inactivityTimeout (in affidabiliSession).

Modifica 19 feb 2009: questa modifica serve solo per indicare che non ho ancora trovato un modo per testare le impostazioni di timeout del WCF.

risposta

1

Se si guarda nel posto giusto, è possibile ottenere gli eventi di canale e modificare il test di essere a conoscenza di loro. Connect è un metodo booleano nel servizio WCF. Ho usato svcutil per generare una classe proxy usando metodi asincroni.

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

} 

Spero che questo vi dà qualche valore.

+0

Ciao Chris, grazie per le tue risposte. È utile per tenere traccia degli eventi del canale ma questo non mi aiuta a causare le eccezioni di timeout. Ho davvero bisogno di causare le eccezioni di timeout per dimostrare che il mio codice di gestione degli errori è corretto. – Sylvain

+0

Non sono a conoscenza di alcun codice che possa forzare un timeout ma è possibile rilasciare i valori per renderli più facili da attivare. –

+1

Ciao Chris, l'ho fatto; Ho abbandonato tutti i valori di timeout a 1 secondo, su entrambi i lati (client/servizio). L'unica impostazione efficace è sendTimeout, generato dal client. Tutte le altre impostazioni di timeout sono inefficaci, motivo per cui sto postando questa domanda. Come dovrei selezionare i buoni valori e assicurarmi di avere un buon codice di gestione del timeout se non c'è modo di riprodurre ogni tipo di timeout in un ambiente controllato? – Sylvain

Problemi correlati