【发布时间】: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/…
-
谢谢!我去看看:)
标签: c# asp.net-web-api windows-services owin self-hosting