我正在尝试为Windows服务创建一个基类,以便在部署到不同的数据库时尽可能少地进行更改。我有这个,但有一个未处理的例外:
“> Microsoft.VisualStudio.HostingProcess.Utilities.dll”中发生了'System.StackOverflowException'类型的未处理异常,
我是服务新手,所以我可以完全放弃,到目前为止,这就是我所拥有的:
public partial class Service1 : ServiceBase
{
namespace SecureVoiceBase
{
public Service1()
{
try
{
InitializeComponent();
}
catch (Exception e)
{
EventLog.WriteEntry(e.Message);
}
}
protected override void OnStart(string[] args)
{
//code here
}
//OnStop, Timers as well...
}
}
public class Version_10 : ServiceBase// Derived class, This is where I will call
{
//certain methods depending on which database I will use
Version_10 set = new Version_10();
public void Start(string[] args)
{
set.OnStart(args);
}
}
这是我的Program.cs:
namespace testservice
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(params string[] args)
{
var service = new Version_10();
if (!Environment.UserInteractive)
{
var servicesToRun = new ServiceBase[] { service };
ServiceBase.Run(servicesToRun);
return;
}
Console.WriteLine("Running as a Console Application");
Console.WriteLine(" 1. Run Service");
Console.WriteLine(" 2. Other Option");
Console.WriteLine(" 3. Exit");
Console.Write("Enter Option: ");
var input = Console.ReadLine();
switch (input)
{
case "1":
service.Start(args);
Console.WriteLine("Running Service - Press Enter To Exit");
Console.ReadLine();
break;
case "2":
// TODO!
break;
}
Console.WriteLine("Closing");
}
// ServiceBase[] ServicesToRun;
// ServicesToRun = new ServiceBase[]
// {
// new Version_10()
// };
// ServiceBase.Run(ServicesToRun);
}
}
通常我会使用其他方法,但我认为这只会浪费空间。我完全不参加基础课吗?
答案 0 :(得分:1)
你的问题在于:
public class Version_10 : ServiceBase
{
Version_10 set = new Version_10(); // <-- Recursive call on object construct
它与服务或任何东西无关。您的代码具有递归调用,并触发StackOverflow异常。
<强>更新强>
要解决您的问题,请将您的Version_10
课程更改为:
public class Version_10 : ServiceBase
{
public void Start(string[] args)
{
this.OnStart(args);
}
}
答案 1 :(得分:0)
这部分是递归的,这就是你得到System.StackOverflowException的原因。
public class Version_10 : ServiceBase
{
**Version_10 set = new Version_10();**
public void Start(string[] args)
{
set.OnStart(args);
}
}
也许你应该查看一些文章:
答案 2 :(得分:0)
由于这个问题,您将收到Stack Overflow异常:
public class Version_10 : ServiceBase
{
Version_10 set = new Version_10();
}
当您创建Version_10
的实例时,它会创建Version_10
的实例,该实例会创建Version_10
的实例,该实例会创建Version_10
的实例,该实例会创建{的实例{1}}创建Version_10
等的实例....