托管真正的 WEB API 项目而不是简单的 class

Hosting a real WEB API project instead of a simple class

我已经阅读了几篇关于 TopShelf 如何工作的文章 articles。他们都在说:

但现在我想托管现有的 WEB API 项目,而不是这个 testController。我应该如何在这个 TopShelf 控制台应用程序中用这个 testController 替换我的项目?

显然我无法使用 TopShelf 配置我的 WEB API 项目本身,而不是使用控制台应用程序,因为 WEB API 没有像控制台应用程序这样的 exe 文件。

我只想知道我应该如何用我的真实 API 项目替换控制台应用程序中的这个测试控制器?

  1. 将新的控制台应用程序添加到您的解决方案

  2. 将 NuGet 包 Microsoft.Owin.SelfHostMicrosoft.AspNet.WebApi.OwinSelfHostTopshelf 安装到您的新项目

  3. 添加一个Startup.cs (see here)

  4. 添加TopshelfService.cs

    public class TopshelfService
    {
        private IDisposable moDisposable = null;
    
        public void Start()
        {
            this.moDisposable = WebApp.Start<Startup>("http://localhost:9989");
        }
    
        public void Stop()
        {
            this.moDisposable?.Dispose();
        }
    }
    
  5. Topshelf Section 中的代码添加到您的 Main 方法

  6. 添加对现有 WebApi 项目的引用

  7. 在您的 Startup class 中从您的控制器创建一个虚拟实例。 (这是在启动 Owin 之前加载 WebApi 项目所必需的)

    public void Configuration(IAppBuilder app)
    {
        DemoController dummy = new DemoController();
    
        // Configure Web API for self-host. 
        var config = new HttpConfiguration();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    
        app.UseWebApi(config);
    }
    
  8. 编译并运行

  9. 使用 "Project.exe" 安装服务

  10. 现在你有一个 windows 服务“Self Host Web API Demo'