Question

J'ai une application WCF qui a deux Services que je suis en train d'hôte dans un seul Service Windows à l'aide de net.tcp.Je peux exécuter, soit de les services très bien, mais dès que j'essaie de mettre les deux dans le Service Windows seulement le premier des charges jusqu'à.J'ai déterminé que le deuxième des services ctor est appelé, mais le Démarrage se déclenche jamais.Cela me dit que la WCF est de trouver quelque chose de mal avec le chargement de cette deuxième service.

À l'aide de net.tcp je sais que je dois tourner sur le port de partage et de démarrer le service partage de port sur le serveur.Tout cela semble fonctionner correctement.J'ai essayé de mettre les services, sur les différents ports tcp et toujours pas de succès.

Mon service programme d'installation de classe ressemble à ceci:

 [RunInstaller(true)]
 public class ProjectInstaller : Installer
 {
      private ServiceProcessInstaller _process;
      private ServiceInstaller        _serviceAdmin;
      private ServiceInstaller        _servicePrint;

      public ProjectInstaller()
      {
            _process = new ServiceProcessInstaller();
            _process.Account = ServiceAccount.LocalSystem;

            _servicePrint = new ServiceInstaller();
            _servicePrint.ServiceName = "PrintingService";
            _servicePrint.StartType = ServiceStartMode.Automatic;

            _serviceAdmin = new ServiceInstaller();
            _serviceAdmin.ServiceName = "PrintingAdminService";
            _serviceAdmin.StartType = ServiceStartMode.Automatic;

            Installers.AddRange(new Installer[] { _process, _servicePrint, _serviceAdmin });
      }   
}

et les deux services très similaires

 class PrintService : ServiceBase
 {

      public ServiceHost _host = null;

      public PrintService()
      {
            ServiceName = "PCTSPrintingService";
            CanStop = true;
            AutoLog = true;

      }

      protected override void OnStart(string[] args)
      {
            if (_host != null) _host.Close();

            _host = new ServiceHost(typeof(Printing.ServiceImplementation.PrintingService));
            _host.Faulted += host_Faulted;

            _host.Open();
      }
}
Était-ce utile?

La solution

La Base de votre service sur ce Article MSDN et créer deux service des hôtes.Mais au lieu de l'appel de chaque service d'accueil directement, vous pouvez le casser autant de classes que vous voulez qui définit chaque service que vous souhaitez exécuter:

internal class MyWCFService1
{
    internal static System.ServiceModel.ServiceHost serviceHost = null;

    internal static void StartService()
    {
        if (serviceHost != null)
        {
            serviceHost.Close();
        }

        // Instantiate new ServiceHost.
        serviceHost = new System.ServiceModel.ServiceHost(typeof(MyService1));
        // Open myServiceHost.
        serviceHost.Open();
    }

    internal static void StopService()
    {
        if (serviceHost != null)
        {
            serviceHost.Close();
            serviceHost = null;
        }
    }
};

Dans le corps de la windows service d'accueil, d'appeler les différentes classes:

    // Start the Windows service.
    protected override void OnStart( string[] args )
    {
        // Call all the set up WCF services...
        MyWCFService1.StartService();
        //MyWCFService2.StartService();
        //MyWCFService3.StartService();


    }

Ensuite, vous pouvez ajouter autant de services WCF comme vous le souhaitez pour un service windows hôte.

N'oubliez pas d'appeler de l'arrêt de l'utilisation de méthodes....

Autres conseils

            Type serviceAServiceType = typeof(AfwConfigure);
            Type serviceAContractType = typeof(IAfwConfigure);

            Type serviceBServiceType = typeof(ConfigurationConsole);
            Type serviceBContractType = typeof(IConfigurationConsole);

            Type serviceCServiceType = typeof(ConfigurationAgent);
            Type serviceCContractType = typeof(IConfigurationAgent);

            ServiceHost serviceAHost = new ServiceHost(serviceAServiceType);
            ServiceHost serviceBHost = new ServiceHost(serviceBServiceType);
            ServiceHost serviceCHost = new ServiceHost(serviceCServiceType);
            Debug.WriteLine("Enter1");
            serviceAHost.Open();
            Debug.WriteLine("Enter2");
            serviceBHost.Open();
            Debug.WriteLine("Enter3");
            serviceCHost.Open();
            Debug.WriteLine("Opened!!!!!!!!!");

Si vous voulez un service Windows pour démarrer deux services WCF, vous aurez besoin d'un ServiceInstaller qui a deux ServiceHost instances, qui sont tous deux commencé dans le (seul) méthode OnStart.

Vous pouvez suivre le modèle pour ServiceInstaller c'est dans le code du modèle lorsque vous choisissez de créer un nouveau Service Windows dans Visual Studio, en général c'est un bon endroit pour commencer.

vous avez probablement juste besoin de 2 le service des hôtes.

_host1 et _host2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top