Vous avez l'idée générale correcte. J'ai utilisé la méthode d'extension suivante pour garder les lignes de code répétitif au minimum.
public static class ICommunicationObjectExtensions
{
public static void SafelyCloseConnection(this ICommunicationObject objectToClose)
{
bool success = false;
try
{
objectToClose.Close();
success = true;
}
finally
{
if (!success)
{
objectToClose.Abort();
}
}
}
}
Exemple de code en utilisant cette méthode d'extension:
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();
}
Bien sûr, cela est C#, mais je pense que cela devrait encore être utile.
J'aime votre solution, mais avez-vous une, que peut être utilisé avec l'injection de dépendances. Comme un service est une dépendance, je ne veux pas exécuter mon test. –
Ce n'est pas ma solution. Dans tous les cas, je m'attends à ce que vous puissiez rendre 'Service' non statique, et injecter le 'ChannelFactory ', ou le 'IClientChannel'. –