web-dev-qa-db-fra.com

Exécution d'une fonction au démarrage de WCF

Je ne sais pas si c'est possible, mais j'aimerais avoir une fonction exécutée dès qu'un service WCF est démarré pour générer les données de cache initiales. Je ne suis pas inquiet maintenant de savoir comment implémenter le cache, ma question est strictement d'avoir la fonction exécutée au démarrage du service. Le service sera RESTful.

Le service sera finalement hébergé dans IIS et utilise .Net Framework 4.5

32
SmashCode

Ce que @KirkWoll a suggéré fonctionne, mais seulement si vous êtes dans IIS et c'est la seule méthode statique AppInitialize sous App_Code. Si vous voulez faire l'initialisation par service, si vous avez un méthode AppInitialize différente ou si vous n'êtes pas sous IIS, vous avez ces autres options:

Un exemple d'usine personnalisée est illustré ci-dessous:

public class MyFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        ServiceHost Host = base.CreateServiceHost(serviceType, baseAddresses);
        Host.Opening += new EventHandler(Host_Opening);
        return Host;
    }

    void Host_Opening(object sender, EventArgs e)
    {
        // do initialization here
    }
}

}

33
carlosfigueira

Le moyen le plus simple consiste à créer un App_Code dossier sous la racine de votre projet WCF, créez une classe (je l'appellerai Initializer mais cela n'a pas d'importance. La partie importante est le nom de la méthode) comme ceci:

public class Initializer
{
    public static void AppInitialize()
    {
        // This will get called on startup
    } 
}

Plus d'informations sur AppInitialize peuvent être trouvées ici .

31
Kirk Woll