【发布时间】:2020-04-19 17:31:15
【问题描述】:
我正在尝试创建一个 Web API 服务,但是当我尝试作为服务运行时,我得到了NullReferenceException。如果我删除 ServiceBase 部分,它运行良好。如果我替换 Thread 什么都不做,那么它会照常工作。
什么可能导致NullReferenceException?
namespace WebApi
{
public class Program
{
public static void Main(string[] args)
{
//To Debug
//BuildWebHost(args).Run();
//To Run as Service
using (var service = new TestService())
{
ServiceBase.Run(service);
}
}
public static IWebHostBuilder BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://localhost:5000");
}
}
class TestService : ServiceBase
{
public TestService()
{
ServiceName = "TestService";
}
protected override void OnStart(string[] args)
{
string filename = CheckFileExists();
File.AppendAllText(filename, $"{DateTime.Now} started.{Environment.NewLine}");
Thread t = new Thread(new ThreadStart(Program.BuildWebHost(args).Build().Run));
t.Start();
}
protected override void OnStop()
{
string filename = CheckFileExists();
File.AppendAllText(filename, $"{DateTime.Now} stopped.{Environment.NewLine}");
}
private static string CheckFileExists()
{
string filename = @"c:\tmp\MyService.txt";
if (!File.Exists(filename))
{
File.Create(filename);
}
return filename;
}
}
【问题讨论】:
-
如果您提供 NullReferenceException 的堆栈跟踪会有所帮助
-
这里来自事件查看器:pastebin.com/dpRbxa1A
-
你检查 args 了吗?
-
我没有放任何参数。它可以在没有 Windows 服务的情况下工作。
标签: c# service nullreferenceexception