[英]Host Web API as Windows Service using OWIN
我正在嘗試使用OWIN將Web API應用程序作為Windows服務運行。 但是,在嘗試啟動服務時,我收到以下消息:
本地計算機上的[ServiceName]服務已啟動,然后停止。 如果某些服務未被其他服務或程序使用,則會自動停止。
出於某種原因,我的服務不明白它應該繼續監聽http:// localhost:9000
VS解決方案包含兩個項目:Web API和Windows服務。
在Windows服務項目中,我有:
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service()
};
ServiceBase.Run(ServicesToRun);
}
}
public partial class Service : ServiceBase
{
private const string _baseAddress = "http://localhost:9000/";
private IDisposable _server = null;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_server = WebApp.Start<Startup>(url: _baseAddress);
}
protected override void OnStop()
{
if (_server != null)
{
_server.Dispose();
}
base.OnStop();
}
}
在OnStart中 , Startup引用Web API項目中的Startup類:
public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("Default",
"{controller}/{id}",
new { id = RouteParameter.Optional });
builder.UseWebApi(config);
}
}
(它還包含Unity和日志記錄的一些配置。)
我想Windows服務項目的安裝程序部分基本上是無關緊要的,盡管知道我有以下內容可能很有用:
this.serviceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalService;
我嘗試過的:
完整源代碼: github.com/SabrinaMH/RoundTheClock-Backend/tree/exploring_hosting
當您在本地計算機上啟動“然后停止服務”時,通常意味着啟動服務時出現未捕獲的異常。 看看本地計算機上的Windows服務啟動然后停止錯誤 ,以獲取查找該異常的提示。
根據您的描述,我猜這個問題是由於另一個項目上存在Startup類引起的,您是否嘗試在窗口服務項目中創建啟動類?
此外,來自HStackOverflow( https://github.com/danesparza/OWIN-WebAPI-Service )的鏈接顯示了從不同項目加載控制器的解決方法,或者動態地將程序集解析為當前AppDomain。 我想這也值得一試。
希望這可以幫助。
對於該示例OWIN-WebAPI-Service ,您必須安裝Package
Install-Package Microsoft.Owin.Host.HttpListener
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.