5

私はコンソール アプリケーション (Windows サービス インストーラーとしても機能する) でホストされている WCF サービスを持っています

コンソール アプリケーションのクラスは次のようになります。

public class MyAppWindowsService : ServiceBase
    {
        public ServiceHost _MyAppClientServiceHost = null;
        public ServiceHost _MyAppIntegrationServiceHost = null;
        public ServiceHost _MyAppserviceHost = null;

        public MyAppWindowsService()
        {
            // Name the Windows Service
            ServiceName = "MyApp Service";
        }

        public static void Main()
        {
            ServiceBase.Run(new MyAppWindowsService());
        }

        private void StopService(ServiceHost serviceHost)
        {
            if (serviceHost != null)
            {
                  serviceHost.Close();
                  serviceHost = null;
            }
        }
        private ServiceHost StartService(Type serviceType)
        {
            ServiceHost serviceHost = null;

            // Create a ServiceHost for the CalculatorService type and 
            // provide the base address.
            serviceHost = new ServiceHost(serviceType);

            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            serviceHost.Open();

            return serviceHost;
        }
        private void StartServices()
        {
            StopService(_MyAppClientServiceHost);
            StopService(_MyAppIntegrationServiceHost);
            StopService(_MyAppServiceHost);

            _MyAppClientServiceHost = StartService(typeof(MyApp.ServiceImplementation.MyAppClientService));
            _MyAppIntegrationServiceHost = StartService(typeof(MyApp.ServiceImplementation.MyAppIntegration));
            _MyAppServiceHost = StartService(typeof(MyApp.ServiceImplementation.HL7Service));
        }
        private void StopServices()
        {
            StopService(_MyAppClientServiceHost);
            StopService(_MyAppIntegrationServiceHost);
            StopService(_MyAppHl7ServiceHost);
        }

        // Start the Windows service.
        protected override void OnStart(string[] args)
        {
            StartServices();
        }

        protected override void OnStop()
        {
            StopServices();
        }

    }

これは Windows サービスで実行するために作成されたものですが、(開発中に) デバッグ モードで通常のセルフホストとして実行できるようにするにはどうすればよいですか? または、実行時にこのサービスをデバッグできるようにするには、特別なプロジェクトを開始する必要がありますか?

編集:

既存の Windows サービス プロジェクトを使用することにしましたが、メインを次のように変更します。

public static void Main()
        {
            if (Debugger.IsAttached)
            {
                Console.WriteLine("--- MyApp Services ---");
                Console.WriteLine("Starting services...");
                Instance.StartServices();
                Console.WriteLine("--Finished--");
                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
                Instance.StopServices();
            }
            else
                ServiceBase.Run(new MyAppWindowsService());
        }
4

1 に答える 1

6

これが私がすることです

ソリューション A

  • Debug\binフォルダーInstallUtilからWindows サービスをインストールします
  • sc startまたはを使用してサービスを停止および開始しますsc stop
  • サービスが開始したら、[デバッグ] > [プロセスにアタッチ] を実行し、VS をサービスにアタッチします。

ソリューション B

OnStartメソッドの最初の行でDebugger.Break呼び出しを行います。

ソリューション C

サービスと同じジョブを実行する一時的な別のコンソール アプリケーションを追加します。

于 2012-07-13T12:26:35.843 に答える