2017-08-28 7 views
0

j'ai lu plusieurs articles sur la façon dont ne fonctionne Topshelf. Chacun d'entre eux disent:Hébergement d'un véritable projet API WEB au lieu d'une classe simple

  • Créer une application console

  • Ajoutez le package Topshelf NuGet

  • Créer simple testController : ApiController pour représenter la logique de service (Je veux avoir mon WEB existante Projet API à héberger à la place de ce testController)

  • ...

Mais maintenant, je veux que mon projet d'API Web soit hébergé à la place de testController. Comment dois-je remplacer mon projet avec cette testController dans cette application de console TopShelf?

Il est évident que je ne peux pas configurer mon projet API WEB lui-même avec Topshelf au lieu d'utiliser une application console car l'API WEB n'a pas un fichier exe comme l'application de la console.

Je veux juste savoir comment dois-je remplacer ce contrôleur de test à l'intérieur de l'application de la console avec mon vrai projet API?

+0

Fondamentalement, vous devez créer un projet d'API Web autonome.Vous pouvez ensuite ajouter le testcontroller dans le nouveau projet puis l'héberger dans IIS. –

+0

@SouvikGhosh Je veux l'héberger dans Windows Services au lieu de IIS par Topshelf. –

+0

Avez-vous vérifié ceci- https://codeopinion.com/self-host-asp-net-web-api-as-a-windows-service/ –

Répondre

1
  1. Ajouter une nouvelle application console à votre solution

  2. Installer NuGet Package Microsoft.Owin.SelfHost, Microsoft.AspNet.WebApi.OwinSelfHost et Topshelf à votre nouveau projet

  3. Ajouter un Startup.cs (see here)

  4. Ajouter 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. code Ajouter de Topshelf Section à votre principal Methode

  6. Ajouter une référence à votre projet existant WebAPI

  7. Créer une instance factice de vous contrôleur dans votre classe Startup. (Cela est nécessaire pour vous charger WebAPI projet avant le début 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. Compilez et exécutez

  9. Installez le service avec "Project.exe" installer

  10. Maintenant vous avez un service Windows "Démonstration de l'API Web de l'hôte autonome"

+0

Merci beaucoup. C'est exactement ce dont j'ai besoin. Je me demande pourquoi aucun des articles ne pointe à ceci et comment traiter l'API du monde réel avec Topshelf. –

+0

La seule partie manquante dont j'avais besoin était l'étape 6 et 7. Créez une instance fictive à partir de votre contrôleur dans votre classe de démarrage. (Ceci est nécessaire pour charger votre projet WebApi avant de démarrer Owin) ceci n'est mentionné nulle part. Bien que j'ai même fait l'étape 6, mais sans l'étape 7, cela ne fonctionne pas. –

+0

Si vous démarrez avec une application console, vous n'avez pas besoin d'un projet WebApi. Vous pouvez simplement ajouter les classes de contrôleur au projet. Ensuite, vous n'avez pas besoin de l'étape 7. – PinBack