2017-02-28 101 views

回答

0

是的,您可以使用WebListener Web服務器而不是Kestrel。 WebListener只能在Windows平臺上運行,但由於這是您正在運行的地方,因此這是您的選擇。

但是,WebListener不依賴IIS作爲反向代理,實際上WebListener不能與IIS或IIS Express一起使用,因爲它與ASP.NET Core Module不兼容。但它確實爲您提供了一個用於在Windows上託管ASP.NET Core的非Kestrel選項。

您可以瞭解更多有關在這裏:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/weblistener

如果你必須在IIS託管和你不希望使用紅隼,你在Windows上運行,那麼有沒有選項。在Windows上,您可以使用沒有IIS的WebListener進行託管,也可以將使用IIS作爲反向代理的Kestrel託管。這些是目前Windows上的唯一兩個選項。

+0

看起來OP想要將他們的Core應用程序作爲Web應用程序部署在共享主機環境中。他們無法控制Web服務器。他們不能只部署一個控制檯應用程序,它自己綁定到端口80. – CodeCaster

+0

是的CodeCaster是正確的,我錯過了這個信息,但它必須包含在IIS共享主機 – DavWEB

+0

好吧,我想我們必須堅持ASP.NET非 - 核心現在.. – DavWEB

5

通過使用OWIN,您實際上可以在工作進程中的IIS中運行ASP.NET Core(因此不使用ASP.NET核心模塊)。

這是可能的,因爲ASP.NET Core can be hosted on an OWIN server和IIS can be made an OWIN Server

看看下面的OWIN中間件,它展示瞭如何在IIS上運行ASP.NET Core。有關更完整的示例,請參閱此要點:https://gist.github.com/oliverhanappi/3720641004576c90407eb3803490d1ce

public class AspNetCoreOwinMiddleware<TAspNetCoreStartup> : OwinMiddleware, IServer 
    where TAspNetCoreStartup : class 
{ 
    private readonly IWebHost _webHost; 
    private Func<IOwinContext, Task> _appFunc; 

    IFeatureCollection IServer.Features { get; } = new FeatureCollection(); 

    public AspNetCoreOwinMiddleware(OwinMiddleware next, IAppBuilder app) 
     : base(next) 
    { 
     var appProperties = new AppProperties(app.Properties); 
     if (appProperties.OnAppDisposing != default(CancellationToken)) 
      appProperties.OnAppDisposing.Register(Dispose); 

     _webHost = new WebHostBuilder() 
      .ConfigureServices(s => s.AddSingleton<IServer>(this)) 
      .UseStartup<TAspNetCoreStartup>() 
      .Build(); 

     _webHost.Start(); 
    } 

    void IServer.Start<TContext>(IHttpApplication<TContext> application) 
    { 
     _appFunc = async owinContext => 
     { 
      var features = new FeatureCollection(new OwinFeatureCollection(owinContext.Environment)); 

      var context = application.CreateContext(features); 
      try 
      { 
       await application.ProcessRequestAsync(context); 
       application.DisposeContext(context, null); 
      } 
      catch (Exception ex) 
      { 
       application.DisposeContext(context, ex); 
       throw; 
      } 
     }; 
    } 

    public override Task Invoke(IOwinContext context) 
    { 
     if (_appFunc == null) 
      throw new InvalidOperationException("ASP.NET Core Web Host not started."); 

     return _appFunc(context); 
    } 

    public void Dispose() 
    { 
     _webHost.Dispose(); 
    } 
} 
+1

我已經成功地做到了這一點,但是我確實需要將內容類型設置爲「」,以便AspNetCore不會感到困惑,並將owin實現默認的文本/ html返回給406。 –