我是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
答案 0 :(得分:1)
检查事件查看器中服务所引发的异常