예제 #1
0
        private static void CreateHost(HostConfigurator config, out AppServiceOptions serviceOptions)
        {
            // Чтение параметров командной строки
            var parameters = config.SelectPlatform(i => i.AddStringParameter("packageId")
                                                         .AddStringParameter("packageVersion")
                                                         .AddStringParameter("packageInstance")
                                                         .AddStringParameter("packageDirectory")
                                                         .AddStringParameter("packageTimeout")
                                                         .AddStringParameter("startOptions"));

            serviceOptions = ParseServiceOptions(parameters);

            // Установка текущего каталога приложения
            Directory.SetCurrentDirectory(serviceOptions.PackageDirectory);

            // Установка таймаута для запуска и остановки

            var serviceTimeout = TimeSpan.MaxValue;

            if (serviceOptions.PackageTimeout != null)
            {
                serviceTimeout = TimeSpan.FromSeconds(serviceOptions.PackageTimeout.Value);
                config.SetStartTimeout(serviceTimeout);
                config.SetStopTimeout(serviceTimeout);
            }

            config.Service<AppServiceHost>(s =>
                                           {
                                               // Создание экземпляра приложения
                                               s.ConstructUsing(hostSettings =>
                                                                {
                                                                    try
                                                                    {
                                                                        var instance = new AppServiceHost();
                                                                        return instance;
                                                                    }
                                                                    catch (Exception exception)
                                                                    {
                                                                        Console.WriteLine(exception);
                                                                        throw;
                                                                    }
                                                                });

                                               // Запуск экземпляра приложения
                                               s.WhenStarted((instance, hostControl) =>
                                                             {
                                                                 try
                                                                 {
                                                                     instance.Start(serviceTimeout);
                                                                     return true;
                                                                 }
                                                                 catch (Exception exception)
                                                                 {
                                                                     Console.WriteLine(exception);
                                                                     throw;
                                                                 }
                                                             });

                                               // Остановка экземпляра приложения
                                               s.WhenStopped((instance, hostControl) =>
                                                             {
                                                                 try
                                                                 {
                                                                     instance.Stop(serviceTimeout);
                                                                     return true;
                                                                 }
                                                                 catch (Exception exception)
                                                                 {
                                                                     Console.WriteLine(exception);
                                                                     throw;
                                                                 }
                                                             });
                                           });

            // Установка имени службы

            var serviceName = GetServiceName(serviceOptions);
            config.SetServiceName(serviceName);
            config.SetDisplayName(serviceName);
            config.SetDescription(serviceName);

            // Установка экземпляра службы

            var serviceInstance = serviceOptions.PackageInstance;

            if (!string.IsNullOrWhiteSpace(serviceInstance))
            {
                config.SetInstanceName(serviceInstance);
            }
        }
예제 #2
0
 private static string GetServiceName(AppServiceOptions serviceOptions)
 {
     return $"{serviceOptions.PackageId}.{serviceOptions.PackageVersion}";
 }