【问题标题】:Host Web API as Windows Service using OWIN使用 OWIN 将 Web API 托管为 Windows 服务
【发布时间】:2015-04-16 03:03:39
【问题描述】:

我正在尝试使用 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

【问题讨论】:

  • 我的行为几乎完全相同。你找到解决办法了吗?
  • 不,很遗憾没有。如果您找到解决方案,请告诉我。我在另一个项目中偶然发现了相同的服务消息,这与 OWIN 无关。在那里,解决方案是确保服务项目中的配置文件包含与应用程序项目本身相同的信息(因为 Windows 服务项目在它自己的项目中使用了配置文件)。但我还没有尝试解决这个问题。
  • 我发现这篇文章很有用:stackoverflow.com/questions/4864673/…
  • 谢谢!我去看看:)
  • 你检查了这个链接吗? piotrwalat.net/hosting-web-api-in-windows-service

标签: c# asp.net-web-api windows-services owin self-hosting


【解决方案1】:

当您得到“本地计算机上的服务启动然后停止”时,通常意味着启动服务时存在未捕获的异常。查看Windows service on Local Computer started and then stopped error,了解查找该异常的提示。

根据您的描述,我猜这个问题是由另一个项目中存在的启动类引起的,您是否尝试过在窗口服务项目中包含启动类?

此外,来自 HStackOverflow (https://github.com/danesparza/OWIN-WebAPI-Service) 的链接显示了一种从不同项目加载控制器或将程序集动态解析到当前 AppDomain 的变通方法。我想这也值得一试。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    对于那个例子OWIN-WebAPI-Service,你必须安装包

    Install-Package Microsoft.Owin.Host.HttpListener
    

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 2020-09-15
      相关资源
      最近更新 更多