2009-06-11 23 views
6

¿Cómo puedo probar la unidad el efecto de cada configuración de tiempo de espera WCF? Quiero asegurarme de seleccionar buenos valores y también quiero asegurarme de que mi código de manejo de excepciones sea sólido.¿Cómo probar la configuración de tiempo de espera WCF?

Creé un programa de cliente y un servidor WCF para probar la configuración de tiempo de espera. En la implementación de mi servicio, agregué un Thread.Sleep (5000). En el lado del cliente, la única configuración que provoca un tiempo de espera es sendTimeout.

No importa qué valor use en todas las otras configuraciones, el tiempo de espera nunca ocurre. ¿Cómo puedo probar todas las otras configuraciones?

Aquí están las configuraciones que me gustaría probar: sendTimeout, receiveTimeout, closeTimeout, openTimeout y inactivityTimeout (en reliableSessions).

Editar 19 feb 2009: Esta edición es solo para indicar que todavía no he encontrado una manera de probar la configuración WCF timeout.

Respuesta

1

Si nos fijamos en el lugar correcto, puede obtener los eventos de canal y modificar su prueba para estar al tanto de ellos. Connect es un método booleano en el servicio WCF. Utilicé svcutil para generar una clase proxy usando métodos async.

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

} 

Espero que esto le de algún valor.

+0

Hola Chris, gracias por tus respuestas. Eso es útil para rastrear los eventos del canal, pero eso no me ayuda a causar las excepciones de tiempo de espera. Realmente necesito causar las excepciones de tiempo de espera para demostrar que mi código de manejo de errores es correcto. – Sylvain

+0

No conozco ningún código que pueda forzar el tiempo de espera, pero puede soltar sus valores para facilitar su activación. –

+1

Hola Chris, lo hice; Dejé caer todos los valores de tiempo de espera a 1 segundo, en ambos lados (cliente/servicio). La única configuración que es efectiva es sendTimeout, planteada por el cliente. Todas las demás configuraciones de tiempo de espera no son efectivas, por lo que estoy publicando esta pregunta. ¿Cómo se supone que debo seleccionar buenos valores y asegurarme de tener un buen código de manejo de tiempo de espera si no hay forma de reproducir cada tipo de tiempo de espera en un entorno controlado? – Sylvain

Cuestiones relacionadas