如何在IIS中托管应用程序的内部?检查Asp.Net(核心)应用程序是否托管在IIS中
3
A
回答
0
我相信没有直接的方法来实现这种开箱即用的功能。至少我没有找到一个。正如我所知道的,事实上,ASP.NET Core应用程序实际上是一个独立的应用程序,对它的父上下文一无所知,除非后者会显示有关它自己的信息。
例如在配置文件中,我们可以知道我们正在运行的是哪种安装类型:production
或development
。我们可以假设production
是IIS
,而development
不是。但是,这并没有为我工作。由于我的生产设置可能是IIS
或windows service
。
所以我已经通过向我的应用程序提供不同的命令行参数来解决此问题,具体取决于它应该执行的运行类型。实际上,这对我来说很自然,因为windows service
确实需要不同的方法来运行。
例如在我的情况的代码看起来有点像这样:
namespace AspNetCore.Web.App
{
using McMaster.Extensions.CommandLineUtils;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.WindowsServices;
using System;
using System.Diagnostics;
using System.IO;
public class Program
{
#region Public Methods
public static IWebHostBuilder GetHostBuilder(string[] args, int port) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseIISIntegration()
.UseUrls($"http://*:{port}")
.UseStartup<Startup>();
public static void Main(string[] args)
{
var app = new CommandLineApplication();
app.HelpOption();
var optionHosting = app.Option("--hosting <TYPE>", "Type of the hosting used. Valid options: `service` and `console`, `console` is the default one", CommandOptionType.SingleValue);
var optionPort = app.Option("--port <NUMBER>", "Post will be used, `5000` is the default one", CommandOptionType.SingleValue);
app.OnExecute(() =>
{
//
var hosting = optionHosting.HasValue()
? optionHosting.Value()
: "console";
var port = optionPort.HasValue()
? new Func<int>(() =>
{
if (int.TryParse(optionPort.Value(), out var number))
{
// Returning successfully parsed number
return number;
}
// Returning default port number in case of failure
return 5000;
})()
: 5000;
var builder = GetHostBuilder(args, port);
if (Debugger.IsAttached || hosting.ToLowerInvariant() != "service")
{
builder
.UseContentRoot(Directory.GetCurrentDirectory())
.Build()
.Run();
}
else
{
builder
.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName))
.Build()
.RunAsService();
}
});
app.Execute(args);
}
#endregion Public Methods
}
}
此代码不仅允许选择类型的主机(service
和console
- 该选项IIS
应该使用),也允许当您作为Windows服务运行时,更改端口是非常重要的。
另一件好事是使用参数解析库,McMaster.Extensions.CommandLineUtils
- 它将显示有关配置的命令行开关的信息,因此可以很容易地选择正确的值。
相关问题
- 1. 托管ASP.NET核心应用程序
- 2. 如何在IIS中的in-proc中托管asp.net核心应用程序?
- 3. IIS和托管的ASP.Net应用程序
- 4. 检查任何用户是否访问IIS中托管的Web应用程序
- 5. 在IIS中托管WCF应用程序
- 6. 在没有Kestrel的IIS中托管ASP.NET核心
- 7. .net核心应用程序无法通过FTP上传,托管在IIS上
- 8. 无法在IIS中托管ASP.NET MVC应用程序
- 9. .NET核心的ASP.NET vNext可以托管在IIS之外吗?
- 10. 托管asp.net应用程序
- 11. Asp.Net核心MVC应用程序IIS中的Windows身份验证
- 12. 在IIS上部署ASP.Net核心1应用程序(404错误)
- 13. ASP.NET核心符号在哪里托管?
- 14. 如何让我的ASP.NET核心应用程序使用WebListener和Windows身份验证在IIS下托管?
- 15. Asp.Net IIS托管
- 16. ASP.NET核心Web应用程序中
- 17. Windows IoT核心是否运行.NET核心应用程序?
- 18. 托管在ASP.NET Web应用程序powershell
- 19. 在ASP.NET核心如何检查请求是否是本地的?
- 20. 监视IIS 6.0上托管的ASP.NET应用程序?
- 21. 自托管Web应用程序与IIS托管?
- 22. 托管在IIS(Windows 10)上时无法在Web应用程序中托管LocalDB
- 23. asp.net托管与iis
- 24. IIS托管,asp.net mvc
- 25. 当从IIS托管的MVC应用程序调用时,Context.User在自托管的SignalR中心为空
- 26. 托管ASP.Net MVC在IIS
- 27. 403.14 - 发布Asp.Net核心应用程序
- 28. VS2017 ASP.NET核心Web应用程序
- 29. ASP.NET核心MVC应用程序设置
- 30. ASP.NET核心Web应用程序是否针对完整的dotnet框架在IIS中工作?