Run asp.net core web app as a windows service via IIS
Rick Strahl has a thorough article on publishing your dot net core app with IIS
This requires you to install the AspNetCoreModule
into IIS and it is this module which manages the lifetime of your dot net core process which runs separately to w3wp.exe
in its own process (e.g. WebApplication1.exe
)
This is less than ideal if your web app runs background tasks that you want running constantly - it requires you to poll your website after a server or IIS reboot to ensure your process is loaded and running (via AspNetCoreModule
)
It is possible to host the dotnet core app as a windows service but this wont work with AspNetCoreModule - the latter will simply ignore the running process and start its own new instance.
To get this working so you have your dotnet core app running as a service and have it hosted via IIS (importantly on ports 80,443 with other hosted web apps) the following steps are required: (assumes you are starting from a File -> New Project -> ASP.NET Core Web Application
)
1) in project.json
add references to
"Microsoft.AspNetCore.Hosting": "1.0.0-*",
"Microsoft.AspNetCore.Hosting.WindowsServices": "1.0.0-*",
This will result in an error
The dependency Microsoft.AspNetCore.Hosting.WindowsServices 1.0.0 does not support framework .NETCoreApp,Version=v1.0.
You need to target the full framework - this suited my purposes fine as i was running on windows only and depended on libraries not yet supported by dotnet core. If you absoutely must have this working on other platforms as a pure dotnet core app then check out dasMulli/dotnet-win32-service
Replace the entire frameworks
section in project.json
with
"frameworks": {
"net461": {
}
},
and remove from dependencies
this section
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
}
Modify your Program.cs
file:
if (Debugger.IsAttached || args.Contains("--debug"))
{
host.Run();
}
else
{
host.RunAsService();//extension method in Microsoft.AspNetCore.Hosting.WindowsServices
}
Publish your web app to the file system and navigate to the output folder (e.g.
WebApplication1\src\WebApplication1\bin\Release\PublishOutput
)Install and run app as a service (from admin command prompt)
sc create WebApplication1 binpath="full path to your exe"
You should now be able to navigate and test your web app via http://localhost:5000/api/values
- Lastly you need to setup a proxy in IIS to route requests to your windows service: This step is largely copied from this article by Scott Forsyth
Last revised: 08 Mar, 2017 07:07 AM History
No new comments are allowed on this post.
Comments
No comments yet. Be the first!