55 votes

Application WCF début de l'événement

Quel est le meilleur moyen pour être averti quand un service WCF est commencé?

Est-il quelque chose de similaire à la méthode Application_Start dans le monde.asax pour un ASP.NET application?

82voto

Paul Alexander Points 17611

Puisque c'est juste une classe, vous pouvez utiliser un constructeur statique, qui sera appelé la première fois que le Type est utilisé.

public Service : IContract
{
    public Service(){ // regular constructor }
    static Service(){ // Only called first time it's used. }
}

23voto

Job Vermeulen Points 369

J'ai utilisé ce lien, il y a plusieurs solutions: http://blogs.msdn.com/b/wenlong/archive/2006/01/11/511514.aspx

8voto

Boris Lipschitz Points 1434

Vous pouvez toujours ajouter manuellement mondiale.asax fichiers à votre Service WCF Application hébergée sur IIS et s'intègre avec les ASP.NET pipeline:

<%@ Application Codebehind="Global.asax.cs" Inherits="WcfApplication" Language="C#" %>

public class WcfApplication : HttpApplication
{
    protected void Application_Start()
    {
    }
}

6voto

marc_s Points 321990

Eh bien, ce peut être un peu délicate, car le moyen privilégié pour appeler des services WCF est "par téléphone", par exemple vous n'avez pas vraiment tout ce qui est "en route" et puis se bloque autour, vraiment.

Si vous organisez votre service dans IIS ou a ÉTÉ, il est même "chargement à la demande" de votre service d'accueil - lorsqu'un message arrive, l'hôte est instancié et traite la demande.

Si vous auto-héberger, soit vous avez une console ou Winforms app - de sorte que vous pourriez crochet de là à savoir quand ils commencent. Si vous avez un Windows et le service de votre service d'accueil, vous avez probablement remplacer le Démarrage et OnStop des méthodes de la classe ServiceBase --> crochet en il.

La question est plus: qu'est-ce exactement que vous voulez accomplir? Juste à l'exploitation forestière ou quelque chose comme ça, ou voulez-vous avoir quelque chose de construit en mémoire afin de rester dans les parages??

Marc

4voto

The Luctus Points 51

Si vous avez un Auto-Hébergé Service WCF, vous pouvez ajouter un Événement à l'Ouverture du service, et à l'intérieur de cet Événement, vous pouvez affecter une variable statique, tout comme ce post:

//Static Variables in a WCF Service
public class Post2331848
{
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]    
        string GetString();
    }    

    public class Service : ITest
    {
        public static string TheString; 
        public string GetString()
        {
            return TheString;
        }
    }

    static void host_Opening(object sender, EventArgs e)
    {
        Service.TheString = "This is the original string";
    } 

    public static void Test() 
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service"; 
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress)); 
        ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), ""); 

        //This is the magic line!
        host.Opening += new EventHandler(host_Opening);

        host.Open();

        Console.WriteLine("Host opened"); 
        Console.ReadLine();
        host.Close();
    }
}

(Originaire de http://www.eggheadcafe.com/community/aspnet/18/10162637/help-in-maintain-global-variable-in-wcf.aspx)

Bonne Chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X