C#Windows服务:错误1053

时间:2018-07-23 08:23:20

标签: c# windows-services

我是Windows服务的新手,正在查找许多示例和资料,还搜索了之前提出的问题,但是我还没有找到解决问题的方法。 我正在用C#编写Windows服务,该服务将SOAP请求发送到服务器,对接收到的数据进行整理,并准备将其存储到历史数据库中。

最初,我将其制作为控制台应用程序,但需要在后台按计划运行。这就是为什么我选择Windows服务的原因。作为控制台应用程序,该程序至少需要20分钟,但这可能要花一个多小时,具体取决于数据量。

Windows服务在30秒后返回错误,代码为1053:该服务未及时响应启动或控制请求。 我认为这与尝试在onStart()中运行整个代码的服务有关,因此该服务未及时返回。

我正在使用以下设计:

myProgram.cs:

public MyService()
{
        InitializeComponent();
        ExecuteProgram();
}
protected override void OnStart(string[] args)
{
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Interval = 1000 * 60 * 60 *24; // every 24h  
    timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
    timer.Start();
}
public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
    ExecuteProgram();
}
protected override void OnStop()
{
}
public void ExecuteProgram()
{
     //Here is the code for SOAP requests, preparing data and for making the 
       import file for the historian.
}

在Program.cs中:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {
        try
        {
#if (DEBUG)
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                new MyService()
            };
            ServiceBase.Run(ServicesToRun);
#else
            if (Environment.UserInteractive)
            {
                string parameter = string.Concat(args);
                switch (parameter)
                {
                    case "--install":
                        ManagedInstallerClass.InstallHelper(new[] { Assembly.GetExecutingAssembly().Location });
                        break;
                    case "--uninstall":
                        ManagedInstallerClass.InstallHelper(new[] { "/u", Assembly.GetExecutingAssembly().Location });
                        break;
                }
            }
            else
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new MyService() 
                };
                ServiceBase.Run(ServicesToRun);
            }
#endif
        }
        catch (Exception ex)
        {
            throw (ex);
        }

    }
}

希望您能帮助我解决我的问题。

谢谢!

Koert

1 个答案:

答案 0 :(得分:1)

检查事件查看器中服务所引发的异常