Tienes la idea general correcta. He utilizado el siguiente método de extensión para mantener las líneas de código repetitivo al mínimo.
public static class ICommunicationObjectExtensions
{
public static void SafelyCloseConnection(this ICommunicationObject objectToClose)
{
bool success = false;
try
{
objectToClose.Close();
success = true;
}
finally
{
if (!success)
{
objectToClose.Abort();
}
}
}
}
Ejemplo de código usando este método de extensión:
HelloWorldServiceClient client = new HelloWorldServiceClient();
HelloWorldDataContract dc = new HelloWorldDataContract();
try
{
client.Open();
dc = client.SayHello();
} // Add catch blocks here for anything you want to handle.
finally
{
client.SafelyCloseConnection();
}
Por supuesto, esto es C#, pero creo que todavía debe ser de ayuda.
Me gusta su solución, pero ¿tiene uno, que se puede usar con Dependency Injection. Como un servicio es una dependencia, no quiero ejecutar mi prueba en su contra. –
No es mi solución. En cualquier caso, espero que pueda hacer 'Service' no estático, e inyecte 'ChannelFactory ', o 'IClientChannel'. –