2017-08-28 40 views
0

我已经阅读了关于TopShelf如何工作的几个articles。所有这些都在说:托管一个真正的WEB API项目而不是一个简单的类

  • 创建控制台应用程序

  • 添加Topshelf NuGet包

  • 创建一个简单的testController : ApiController来表示业务逻辑(我想有我现有的网络API项目将托管代替此测试控制器

  • ...

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

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

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

+0

基本上你必须创建一个独立的Web API项目,然后你可以在新创建的testcontroller中添加项目然后将其托管在IIS中。 –

+0

@SouvikGhosh我想托管它在Windows服务而不是由Topshelf IIS。 –

+0

您是否检查了这个 - https://codeopinion.com/self-host-asp-net-web-api-as-a-windows-service/ –

回答

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

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

  3. 添加Startup.cssee here

  4. Add 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. 代码添加到您的主梅索德

  6. 添加引用到现有的WebAPI项目

  7. 创建一个虚拟实例从您在Startup类控制器。 (这是需要加载你的WebAPI项目开始前Owin)

    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. 现在你有一个窗口服务“自主主机Web API演示”

+0

非常感谢。这正是我需要的。我想知道为什么没有文章指出这一点,以及如何使用Topshelf处理现实世界的API。 –

+0

另外,我需要的唯一缺失部分是第6步和第7步。在Startup类中从您的控制器创建一个虚拟实例。 (这是在开始Owin之前加载你的WebApi项目所必需的),这在任何地方都没有提及。虽然我甚至做了第6步,但没有第7步,它不起作用。 –

+0

如果您从控制台应用程序开始,则不需要WebApi项目。您可以简单地将控制器类添加到项目中。那么你不需要第7步。 – PinBack

相关问题