2017-08-28 55 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

相關問題