[WCF] Halo! Halo! Mon service ne répond plus…

Publié le 19 juillet 2011 par Jeremy.jeanson

Avec la mode de Silverlight et aujourd’hui de la TPL, vos services sont de plus en plus sollicités. Dans certains cas, il arrive qu’ils ne répondent plus. Avant de partir sur des conclusions actives ou même de sortir l’artillerie lourde, il convient de vérifier que quelques bonnes pratiques on bien été respectées.

Quand on parle de bonnes pratiques pour la consommation de service, on parle souvent de customisation du Binding et des Behaviors pour faire coller le service au plus près de ses besoins… Oui c’est vrai, c’est une bonne pratique. Mais avez-vous juste pensé à fermer vos connexions?

Cela peut sembler absurde au premier coup d’œil, mais combien de bugs de services ne répondant “soi-disant” plus ,ont lieu, car vous n’avez pas fermé proprement la connexion?

Par exemple pour une méthode qui appel un service via un proxy généré via Visual Studio (héritant donc de ClientBase)

private String GetViaClientBase()
{
    Service1Client client = null;
    String result;
    try
    {
        client = new Service1Client("BasicHttpBinding_IService1");
        result = client.DoWork();
    }
    finally
    {
        if (client != null)
        {
            client.Close();
            client = null;
        }
    }
    return result;
}

Et pour se même service consommé via une ChannelFactory (mon proxy préféré car il permet de refactoring ;) )

private String GetViaChannelFacory()
{
    ChannelFactory factory = null;
    String result ;
    try
    {
        factory = new ChannelFactory("BasicHttpBinding_IService1");
        IService1 channel = factory.CreateChannel();
        result = channel.DoWork();
    }
    finally
    {
        if (factory != null)
        {
            factory.Close();
            factory = null;
        }
    }
    return result;
}

Voila, vous pouvez faire comme bon vous semble (avec ou catch pour la capture d’erreur), mais pensez à fermer vos connexions, cela vous évitera de vous faire jeter par le serveur