Asp.netコアのリリース展開モデルの選択

序文

この重大な意思のこの時間は自由に、基本的に知って取得していない、展開モデルの姿勢は、ライン上に実行されASP.netコアのビジネスロジックのコードを書いて、リリースおよび展開に終始する場合、コードを書く前に、ピットを嫌います。
Microsoft自身のドキュメントを見て、すべての単語を知っているが、彼らはどのようなその意味を理解していません。フレームワークに依存して独立したリリース、IIS、チョウゲンボウ、Nginxは、それを選択し、混乱はほとんどの束を作りました。

選択プロセス

Microsoftのドキュメントが言ったように、我々はASP.netコアプロジェクトは、アプリケーションまたはデプロイメント環境の私達の種類に応じて適切な配置モデルを選択する必要があります展開します。
二段階の選択プロセス。まず、展開モデルを選択します。第二には、管理対象ホストを選択します。以下の説明は、展開します。

展開モードの選択

独立した出版フレームワークは、VSを依存しています

ASP.netコアは現在3つのモードで展開され、独立した放出(SCD)、フレーム依存実行可能ファイル(FDE)の枠組みに依存し、(FDD)。ここでは説明しません非常に異なるものではないFDDとFDEは、公式ドキュメントに興味を持って缶を見ています。
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/

独立したリリース

独立した展開。FDDは異なり、独立して配備(SCD)は、ターゲット・システム上の共有コンポーネントの存在に依存しません。すべてのコンポーネント(.NETのコア.NETコアランタイムライブラリを含む)は、アプリケーションに含まれており、独立して他の.NETのコアアプリケーションの。

フレームワークは依存しています

依存展開フレームワーク。名前が示すように、展開フレームワークは、(FDD)は、ターゲット・システム上に存在する.NETコアの共有システムレベルのバージョンに依存して依存しています。それはまた、ポータブルであるインストーラ既存の.NETのコアので、これ.NETのコアの間に印加されます。アプリケーションは、独自のコードと.NETのコアライブラリの依存関係の外に位置第三者のみが含まれています。

どのように選択すること

簡単に言えば、依存性と独立性フレームワークのリリースとの違いは、.NETランタイムをインストールしていないふりコアとの間の差です。多くの.NETのコアライブラリを使用すると、別のパッケージに移動する必要がありそうなので、独立した出版プログラムは、ボリュームに依存し、共有機器上で実行することができた後のフレームよりもはるかに大きいです。I ASP.netコア・デフォルト・テンプレートは、フレーム依存5Mの大きさについて、100M程度の解放の大きさとは無関係に、測定された使用することを。
ここに画像を挿入説明
独立したリリース、その後、必要はありませんが、.NETコア動作をインストールして、フレームワークに依存するとき、あなたは直接.NETコアランタイムやSDKをインストールする必要があります。
だから、ここでの焦点。サーバーは通常、たまにいくつかの特別な事情のASP.netコアを実行する必要がある他のプログラムを実行している場合、あなたが別のリリースモードを使用することをお勧めします。あなたが複数のサーバーASP.netコアプログラムを実行しようとすると、将来もルートとしてASP.netのコア技術に意図されている場合は、フレームワークは、あなたの最良の選択である依存しています。
ここでは、次のWindowsの.Netコア2.2、例えば、唯一の89M .NETのコアランタイム。あなたが二つ以上のASP.netコアを実行したり、生徒を保存したいのであれば、フレームを選択し、直接、依存省、簡単に取り付けられました。
Linuxでは、Windowsのノートに場所がそれであるとして、あなたが独立したリリースを選択した場合は、上記の、、、.NETコアランタイムがインストールされていないために、プログラムを実行するために、DOTNET xxx.dllこのコマンドを使用することはできません、ディレクトリプログラムにcdはその後./ XXX、xxxはあなたの出力のファイル名であるだろう。

マネージドホスティング選択

IIS VSケストレルVS Windowsサービス

マネージドホスティング選択する際に考慮すべき関係で配置モードを選択した後、マネージドホスティング選択はASP.netのコアアプリケーションでのProgram.csを反映して、方法はCreateWebHostBuilder UseIISまたはUseKestrelに選択することができます。
IIS、ケストレル、Windowsサービス:Microsoftの資料によると、我々は、Windowsの下での選択をホスティングの3種類があります。まず、Windowsのサービスは、基本的にKerstrelですが、カイからの起動を行うことができますサービスで実行されていました。同じ機能を行うことができますIIS。選択したコードに具現どのマネージドホスティング?次のコードは、会議を示しています。ここでは、どのようにホストを選択するために異なる状況を議論します。
サービスは基本的にWindowsのKerstrel(プロテストUseIIS単純ではない稼働)ですので。だからここIISとKerstrelの違いを議論します。ここでは詳細にIISとケストレルの性能差を比較して、物品の兄、について学ぶために。
https://www.cnblogs.com/savorboard/p/dotnet-benchmarks.html#asp.net-core-vs-asp.net-corekestrel-vs-iis
まず、パフォーマンスはケストレルが、これは事実その鉄であるIISよりも優れていますが、それはケストレルリバースプロキシ機能は、単に、A、それは443 DO HTTPS、他のアプリケーションがポート443を使用することはできませんが、IISのポートに接続されていると、それは、複数のアプリケーションのマッピングポートを行うことができないということですありません443タイ複数のアプリケーションは、基本的な操作と言えます。
したがって、アプリケーションは、通常、ネットワークの外側に配備されるケストレルを使用するだけでなく、リバースプロキシ、最初の異なるポートにデプロイケストレル(8081言う)としてIIS、nginxのまたはApacheを追加し、nginxのは、ポート443をリッスンし、要求が受信されますそれを要求するアプリケーションを区別するために要求されたドメイン名に応じて、その後、対応するポート(8081)プロセスに転送されます。
ここに画像を挿入説明
これは非常に恥ずかしい現象が生成されます、パフォーマンスは、リバースプロキシまたは最も遅いケストレルによって決定となります。私は、リバースプロキシ、あなたはケストレルのパフォーマンス、立ち往生IISにならない方法タフに関係なくとしてIISを使用する場合は?なぜ私はIISを使用していませんか?また、それはステップの前進が保存されます。
また、ケストレルは、コンソールアプリケーションの本質はそれが本当にハングアップは、起動開始から、それは当然のことながら、でWindowsサービスを展開するために使用することができ、自分自身を再起動しませんしませんハングアップしている特殊な状況ならば、ありますウォッチドッグは、それを再起動しますが、IISでこれらの事に対処する必要はありません。
そこで、我々はだけでなく、から選択するシナリオを使用して、ホスト迷信のパフォーマンスを選択することはできません。
だから今ここでの焦点は、それがより安定を実行するために、右側のケストレル]を選択し、その後、IP +ポートへのアクセスを行って、ネットワーク内のアプリケーションの展開、あれば、それはWindowsサービスで展開することができます。ドメイン名によってアプリケーションがネットワークの外部に展開されている場合は、アクセスするだけでなく、より多くの一つのアプリケーションよりも実行するには、サーバー上で、ケストレル+リバースプロキシの動作を使用することをお勧めします。IISであなたリバースプロキシ場合でも、あなたがIISを使用する場合にのみ、あなたが特定の性質を高めることができるインプロセスモードが便利な、プログラムにインプロセスモードを伴う他、あなたがホストとしてIISを使用することをお勧めします。サーバーはIISでいくつかのアプリケーションのために実行されているのであれば、非常に多くの添えものを行う必要はありませんメンテナンスの複雑さを軽減するために、正直IISに戻って、パフォーマンスが悪い理由ではないIIS。
また、ここではリバースプロキシを選択し、nginxのを使用することをお勧めします。
ホストは、コードを選択しました。

    public class Program
    {
        public static void Main(string[] args)
        {
            string runMode = "Kestrel"; //"IIS" "Kestrel" "Service"
            if (runMode == "Service")
            {
                var isService = !(Debugger.IsAttached || args.Contains("--console"));
                
                if (isService)
                {
                    var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
                    var pathToContentRoot = Path.GetDirectoryName(pathToExe);
                    Directory.SetCurrentDirectory(pathToContentRoot);
                }
                
                var builder = CreateWebHostBuilder(args.Where(arg => arg != "--console").ToArray());
                var host = builder.Build();
                
                if (isService)
                {
                    host.RunAsService();
                }
                else
                {
                    host.Run();
                }
            }
            else
            {
                CreateWebHostBuilder(args).Build().Run();
            }
        }
        
        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            IWebHostBuilder builder = null;
            string runMode = "Kestrel"; //"IIS" "Kestrel" "Service"

            if (runMode == "IIS")
            {
                builder = WebHost.CreateDefaultBuilder(args)
                    .UseIIS()
                    .UseIISIntegration()
                    .UseStartup<Startup>();
            }
            else if (runMode == "Kestrel")
            {
                builder = WebHost.CreateDefaultBuilder(args)
                    .ConfigureKestrel((context, option) =>
                    {
                        option.Listen(System.Net.IPAddress.Any, 80, (cfg) =>
                        {
                            // 根据需要使用https
                            // cfg.UseHttps(caPath,caPsd);
                        });
                    })
                    .UseKestrel()
                    .UseStartup<Startup>();
            }
            else if (runMode == "Service")
            {
                builder = WebHost.CreateDefaultBuilder(args)
                    .ConfigureLogging((hostingContext, logging) =>
                    {
                        logging.AddEventLog();
                    })
                    .ConfigureAppConfiguration((context, config) =>
                    {
                        // Configure the app here.
                    })
                    .ConfigureKestrel((context, option) =>
                    {
                        option.Listen(System.Net.IPAddress.Any, 80, (cfg) =>
                        {
                            // 根据需要使用https
                            // cfg.UseHttps(caPath,caPsd);
                        });
                    })
                    .UseKestrel()
                    .UseStartup<Startup>();
            }

            return builder;
        }
    }

あなたはケストレル+リバースプロキシとリバースプロキシHTTPSが設定されているコードはちょうどUseHttpsを残すことはできません、そして、これは二回、HTTPS暗号化と復号化の操作に相当し、ここで選択した場合は、プロのテストでは、パフォーマンスのより大幅な損失になります。

オペレーティングシステム関連

WindowsのVSのLinux

众所周知,Linux上是没有IIS这种东西的,以上关于托管宿主的讨论仅针对Windows系统。对于Linux系统下,首先根据需求选择部署模式(独立 or 框架依赖),然后宿主的话只能选Kestrel。如果是内网应用就没必要装反向代理了,如果是外网应用就需要用反向代理 + Kestrel + Linux服务的操作了,Linux Service和Windows Service的作用一样,都是为了使应用开机自启。
这里放上Asp.net core在Linux上的安装教程(可选装SDK或者只装运行时)。
安装 .net core SDK
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
仅安装 .net core 运行时
https://dotnet.microsoft.com/download/linux-package-manager/centos7/runtime-current
Nginx反向代理 + Kestrel + Linux Service教程
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2

如果这篇文章有幸能帮助到你,请不要吝啬你的赞。

参考
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/
https://www.cnblogs.com/savorboard/p/dotnet-benchmarks.html#asp.net-core-vs- --vs-corekestrel ASP.NET IIS
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
https://docs.microsoft.com/zh-cn/aspnet/core/host-そして、デプロイ/ linuxの- nginxの?ビュー= aspnetcore-2.2

公開された15元の記事 ウォンの賞賛2 ビュー4858

おすすめ

転載: blog.csdn.net/weixin_38138153/article/details/100529246