2017-02-28 25 views
1

当社のホスティング部門は、Kestrelを実行しているか、ASP.NET Core Server Hosting Bundle(AspNetCoreModule)をインストールしているASP.NETコアのホスティングを許可しません。Kestrelを使用しないIISでASP.NETコアをホストする

このような状況でASP.NETコアを許可する方法はありますか?

環境:IISおよび.NET最新のWindows Server 2012 R2 4.6.2。

これは共有ホスティング環境であり、アプリケーションはIISで実行されている必要があります。

答えて

0

はい、KestrelではなくWebListener Webサーバーを使用できます。 WebListenerはWindowsプラットフォームでのみ動作しますが、実行している場所であるため、オプションです。

WebListenerはIISをリバースプロキシとして使用しません。実際、WebListenerはASP.NET Core Moduleと互換性がないためIISまたはIIS Expressでは使用できません。しかし、Windows上でASP.NET CoreをホスティングするためのKestrel以外のオプションを提供します。

あなたはここでそれについての詳細を学ぶことができます:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/weblistener

あなたがIISでホストする必要があり、あなたはケストレルを使用したくないし、Windows上で実行されている場合は、オプションはありません。 Windowsでは、IISを使用しないWebListenerを使用してホストするか、IISをリバースプロキシとして使用してKestrelを使用してホストします。現在のところ、これらはWindows上の唯一の2つのオプションです。

+0

OPは、コアアプリケーションを共有ホスティング環境のWebアプリケーションとして展開したいようです。彼らはWebサーバーを制御できません。彼らは自分自身をポート80にバインドするコンソールアプリケーションを展開するだけではありません。 – CodeCaster

+0

はいCodeCasterが正しく、私はこの情報を見逃しましたが、IIS共有ホスティングに含める必要があります – DavWEB

+0

まあ、今のところコア。 – DavWEB

5

OWINを使用すると、実際にはASP.NETコアモジュールを使用しないワーカープロセス内でIISでASP.NETコアを実行できます。

これは、ASP.NETコアcan be hosted on an OWIN serverとIIS can be made an OWIN Serverという事実のために可能です。

IIS上でASP.NETコアを実行する方法を示す次のOWINミドルウェアをご覧ください。より完全な例については、この要点: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の実装がデフォルトにしていたtext/htmlを406に戻すようにcontent-typeを設定する必要がありました。 –

関連する問題