2017-09-08 14 views
3

Je voudrais modifier ma solution pour qu'elle s'exécute sous une instance OWIN auto-hébergée, mais je dois également l'exécuter sous http://localhost si nécessaire.Projet OWIN auto-hébergeant et hébergeant IIS

Comment dois-je structurer ma classe de démarrage pour qu'elle soit reconnue par les deux?

Actuellement, j'ai le projet API Web défini comme une application console avec l'URL du projet http://localhost:2746 et ceci est ma classe de démarrage:

[assembly: OwinStartup(typeof(Startup))] 
namespace Books 
{ 
    public class Startup 
    { 
     public static void Main(string[] args) 
     { 
      const int port = 2746; 
      var url = $"http://localhost:{port}/"; 

      using (WebApp.Start<Startup>(new StartOptions(url) { ServerFactory = "Microsoft.Owin.Host.HttpListener" })) 
      { 
       var client = new HttpClient { BaseAddress = new Uri(url) }; 
       Console.ReadLine(); 
      } 
     } 

     public void Configuration(IAppBuilder app) 
     { 
      HttpConfiguration httpConfiguration = new HttpConfiguration(); 
      WebApiConfig.Register(httpConfiguration); 
      app.Use<CustomExceptionMiddleware>().UseWebApi(httpConfiguration); 
      app.UseFileServer(StaticFileConfig.Build()); 
     } 
    } 
} 

J'ai aussi cela dans le web.config:

<add key="owin:AutomaticAppStartup" value="false" /> 

Répondre

0

utilisation de deux projets:

  1. créer un projet web pour les contrôleurs. api ce projet peut accueillir iis dans
  2. créer un autre projet de la console comme l'auto-hôte, ce projet nécessaire de renvoyer le projet web, vous pouvez maintenant partager le WebApiConfig/Controllers à ce projet

ps: OwinStartup attribut indique la entrypoint pour iis, mais j'utilise le global.asax traditionnel pour initialiser la config api. de sorte que la classe Startup peut également partager la configuration à partir de WebApiConfig