加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

检查是否在IIS中托管Asp.Net(Core)应用程序

发布时间:2020-12-16 09:32:45 所属栏目:asp.Net 来源:网络整理
导读:如果它在IIS中托管,我如何检查应用程序内部? 解决方法 我相信没有直接的方法可以实现开箱即用.至少我没有找到一个.正如我所知道的那样,原因是ASP.NET Core应用程序实际上是一个独立的应用程序,对它的父上下文一无所知,除非后者将揭示有关自身的信息. 例如,
如果它在IIS中托管,我如何检查应用程序内部?

解决方法

我相信没有直接的方法可以实现开箱即用.至少我没有找到一个.正如我所知道的那样,原因是ASP.NET Core应用程序实际上是一个独立的应用程序,对它的父上下文一无所知,除非后者将揭示有关自身的信息.

例如,在配置文件中,我们可以告诉我们正在运行的安装类型:生产或开发.我们可以假设生产是IIS,而开发则不是.然而,这对我没有用.由于我的生产设置可能是IIS或Windows服务.

所以我通过为我的应用程序提供不同的命令行参数来解决这个问题,具体取决于它应该执行的运行类型.实际上,这对我来说很自然,因为Windows服务确实需要不同的运行方法.

例如,在我的情况下,代码看起来有点像:

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
    }
}

此代码不仅允许选择类型的托管(服务和控制台 – IIS应该使用的选项),而且还允许在您作为Windows服务运行时更改重要的端口.

另一个好处是使用参数解析库,McMaster.Extensions.CommandLineUtils – 它将显示有关已配置的命令行开关的信息,因此可以轻松选择正确的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读