我們的託管部門不願意允許運行Kestrel的ASP.NET核心託管或甚至安裝ASP.NET Core Server Hosting Bundle(AspNetCoreModule)。在沒有Kestrel的IIS中託管ASP.NET核心
在這種情況下,有沒有其他選擇允許ASP.NET核心?
環境:帶有最新IIS和.NET 4.6.2的Windows Server 2012 R2。
這是一個共享主機環境,並且應用程序必須在IIS中運行。
我們的託管部門不願意允許運行Kestrel的ASP.NET核心託管或甚至安裝ASP.NET Core Server Hosting Bundle(AspNetCoreModule)。在沒有Kestrel的IIS中託管ASP.NET核心
在這種情況下,有沒有其他選擇允許ASP.NET核心?
環境:帶有最新IIS和.NET 4.6.2的Windows Server 2012 R2。
這是一個共享主機環境,並且應用程序必須在IIS中運行。
是的,您可以使用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上的唯一兩個選項。
通過使用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();
}
}
我已經成功地做到了這一點,但是我確實需要將內容類型設置爲「」,以便AspNetCore不會感到困惑,並將owin實現默認的文本/ html返回給406。 –
看起來OP想要將他們的Core應用程序作爲Web應用程序部署在共享主機環境中。他們無法控制Web服務器。他們不能只部署一個控制檯應用程序,它自己綁定到端口80. – CodeCaster
是的CodeCaster是正確的,我錯過了這個信息,但它必須包含在IIS共享主機 – DavWEB
好吧,我想我們必須堅持ASP.NET非 - 核心現在.. – DavWEB