C# 作为服务运行时WebApi无法启动

C# 作为服务运行时WebApi无法启动,c#,.net-core,raspberry-pi3,asp.net-core-webapi,raspbian,C#,.net Core,Raspberry Pi3,Asp.net Core Webapi,Raspbian,我有个奇怪的问题 像这样运行我的web api很有效: $ /usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll 我在/etc/systemd/system/中创建了这个test-service.service: [Unit] Description=DoorplateBackendService After=network.target StartLimitIntervalSec=0 [Service

我有个奇怪的问题

像这样运行我的web api很有效:

$ /usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll
我在
/etc/systemd/system/
中创建了这个test-service.service:

[Unit]
Description=DoorplateBackendService
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=pi
ExecStart=/usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll
KillSignal=SIGINT    

[Install]
WantedBy=network-online.target
不知怎的,我得到了这个例外,我不知道它来自哪里:

System.IO.IOException: Invalid argument
at System.IO.Enumeration.FileSystemEnumerator`1.FindNextEntry()
at System.IO.Enumeration.FileSystemEnumerator`1.MoveNext()
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance..ctor(FileSystemWatcher watcher, SafeFileHandle inotifyHandle, String directoryPath, Boolean includeSubdirectories, NotifyFilters notifyFilters, CancellationToken cancellationToken)
at System.IO.FileSystemWatcher.StartRaisingEvents()
at System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()
at System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean value)
at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.TryEnableFileSystemWatcher()
at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(String filter)
at Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(String filter)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.<.ctor>b__0_0()
at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)
at Microsoft.Extensions.Configuration.FileConfigurationProvider..ctor(FileConfigurationSource source)
at Microsoft.Extensions.Configuration.Json.JsonConfigurationSource.Build(IConfigurationBuilder builder)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at BrodicatorService.Program.Main(String[] args) in <my_dir>\Program.cs:line 23;
System.IO.IOException:参数无效
位于System.IO.Enumeration.FileSystemumerator`1.FindExtentry()
位于System.IO.Enumeration.FileSystemumerator`1.MoveNext()
位于System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectoryParent,String directoryName)
位于System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectoryParent,String directoryName)
位于System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectoryParent,String directoryName)
位于System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectoryParent,String directoryName)
位于System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectoryParent,String directoryName)
位于System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectoryParent,String directoryName)
位于System.IO.FileSystemWatcher.RunningInstance..ctor(FileSystemWatcher watcher、SafeFileHandle inotifyHandle、String directoryPath、Boolean IncludeSubDirectory、NotifyFilters NotifyFilters、CancellationToken CancellationToken)
在System.IO.FileSystemWatcher.StartRaisingEvents()中
在System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()中
在System.IO.FileSystemWatcher.set_EnableRaisingEvents(布尔值)
在Microsoft.Extensions.FileProviders.Physical.PhysicalFileWatcher.TryEnableFileSystemWatcher()上
位于Microsoft.Extensions.FileProviders.Physical.PhysicalFileWatcher.CreateFileChangeToken(字符串过滤器)
位于Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(字符串筛选器)
在Microsoft.Extensions.Configuration.FileConfigurationProvider.b_uu0_0()中
位于Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer,Action changeTokenConsumer)
位于Microsoft.Extensions.Configuration.FileConfigurationProvider..ctor(FileConfigurationSource源)
位于Microsoft.Extensions.Configuration.Json.JsonConfigurationSource.Build(IConfigurationBuilder)
在Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()中
位于Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException&HostingStartSupers)
在Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()上
在\Program.cs中的broindicatorservice.Program.Main(字符串[]args)处:第23行;

Program.cs-Line23:
CreateWebHostBuilder(args.Build().Run()

经过数小时的调试和尝试,我最终改变了我的服务定义:

[Unit]
Description=MyTestService

[Service]
WorkingDirectory=/usr/local/bin/dotnetcoreapps/api
ExecStart=/usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production


[Install]
WantedBy=multi-user.target
我发现这对我很有帮助


我不知道这里发生了什么。

经过几个小时的调试和尝试,我最终改变了我的服务定义:

[Unit]
Description=MyTestService

[Service]
WorkingDirectory=/usr/local/bin/dotnetcoreapps/api
ExecStart=/usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production


[Install]
WantedBy=multi-user.target
我发现这对我很有帮助


我不知道这里发生了什么。

我的.NET5项目也遇到了同样的问题,并尝试尝试使用“.service”文件

我的解决方案是将工作目录更改为“/tmp”。我认为它可以工作,因为我的应用程序位于挂载的网络磁盘(NFS)上

MS Demo服务器端项目正常工作,但工作目录未设置为“/tmp”


顺便说一句,我没有ernogh point可供评论,所以我发布了一个答案。

我的.NET 5项目也遇到了同样的问题,并尝试使用“.service”文件进行实验

我的解决方案是将工作目录更改为“/tmp”。我认为它可以工作,因为我的应用程序位于挂载的网络磁盘(NFS)上

MS Demo服务器端项目正常工作,但工作目录未设置为“/tmp”


顺便说一句,我没有ernogh point可供评论,因此我发布了一个答案。

请添加代码how方法
CreateWebHostBuilder
looks@IgorCova我可以添加它,但由于它在从终端运行时工作,我认为没有任何问题。我不想让这个问题充斥着代码。好的:)我还建议您在Docker容器中运行.net Core应用程序。它非常方便灵活,请添加代码如何使用方法
CreateWebHostBuilder
looks@IgorCova我可以添加它,但由于它在从终端运行时工作,我认为没有任何问题。我不想让这个问题充斥着代码。好的:)我还建议您在Docker容器中运行.net Core应用程序。它非常方便灵活