簡體   English   中英

使用OWIN將Web API作為Windows服務托管

[英]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;

我嘗試過的:

  • 使用控制台應用程序托管Web API,然后將控制台應用程序作為Windows服務托管。 但即使我包含了'Console.ReadKey()',它也只是停了下來。
  • 遵循本指南: OWIN-WebAPI-Service奇怪的是我可以讓他的服務工作,但當我嘗試更改我的代碼以匹配他的設置時,我不斷得到同樣的錯誤。

完整源代碼: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM