我为我的项目安装了Windows服务,当我启动该服务时出现此错误。
错误1503服务没有及时响应启动或控制请求
但是,当我在 Visual Studio Code 中调试时,该项目工作正常,但当我使用 Visual Studio 2017 按照本 tutorial 和
创建并启动服务时我尝试了很少的解决方案,但错误仍然相同。这是我尝试过的解决方案。
将 ServicesPipeTimeout 修改为 180000
下面的Logservice可以将字符串写入文本文件,我在其中分析服务运行直到哪一部分失败。该服务只能运行到 LogService("3");然后它无法从端口接收字节。
这是代码:
public Service1()
{
InitializeComponent();
LogService("server");
try
{
LogService("1");
IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
UdpClient udpListener = new UdpClient(514);
byte[] bReceive; string sReceive; string sourceIP;
Console.WriteLine("Waiting...");
/* Main Loop */
/* Listen for incoming data on udp port 514 (default for SysLog events) */
while (true)
{
LogService("2");
try
{
LogService("3");
bReceive = udpListener.Receive(ref anyIP);
LogService("4");
/* Convert incoming data from bytes to ASCII */
sReceive = Encoding.ASCII.GetString(bReceive);
LogService(sReceive);
/* Get the IP of the device sending the syslog */
sourceIP = anyIP.Address.ToString();
LogService("5");
LogService(sourceIP);
new Thread(new logHandler(sourceIP, sReceive).handleLog).Start();
/* Start a new thread to handle received syslog event */
LogService(sReceive);
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw ex;
}
}
不知道是代码原因还是其他原因导致错误
更新 参考这个post,我尝试关闭防火墙来接收所有连接,但错误仍然存在。
有一次我的项目在代码中添加
udpListener.Client.Bind(anyIP);
后成功监听了服务器的数据,但经过一些修改后它不再起作用。我不确定 Bind() 是否能让代码工作一次。
这是我解决错误的方法,请参阅此post。不管怎样,我并不完全理解这背后的过程,如果有人有一些很好的例子或链接来解释这个解决方案,请随时在下面发表评论。
protected override void OnStart(string[] args)
{
LogService("Service started");
NewThread = new Thread(runSysLog);
NewThread.Start();
}
protected override void OnStop()
{
LogService("Service stopped");
StopRequest.Set();
//NewThread.Join();
}
public void runSysLog()
{
try
{
AutoResetEvent StopRequest = new AutoResetEvent(false);
/* Main Loop */
while (true)
{
if (StopRequest.WaitOne(5000)) return;
try
{
//while (udpListener.Available > 0)
if (udpListener.Available > 0)
{
//Some code here
}
}
catch (Exception ex)
{
LogService("Whileloop exception: " +ex.ToString());
throw ex;
}
}
}
catch (Exception ex)
{
LogService("Run Sys Log Exception: " +ex.ToString());
throw ex;
}
}