2017-08-29 11 views
1

ASP.NET MVC Core 2.0のBuildWebHost()にオプションのメソッドを追加する正しい方法は何ですか?ASP.NET MVC Core 2.0 - Azure Webサイトへの配備のためにUserKestrel()を削除しますか?

私の開発環境にUseKestrel()を追加してHTTPSをローカルで有効にする必要がありますが、Azure Websitesがそれを気に入らないため、本番環境でこれを削除する必要があります。

背景:私は2.0にASP.NET MVCのコア1.1アプリを移行

。ここでの新しい2.0バージョンだ、

https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/#update-main-method-in-programcs

その文書はWebホスト...それに基づいてを構築するために必要な新しいパターンの概要を示します。具体的には、私はProgram.csの変更に関するここで説明する手順に従っ私BuildWebHost開発に取り組んでいます()メソッド:

public static IWebHost BuildWebHost(string[] args) => 
    WebHost.CreateDefaultBuilder(args) 
    .UseIISIntegration() 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
    .UseStartup<Startup>() 
    .UseKestrel(options => 
    { 
     options.Listen(IPAddress.Loopback, 5001, listenOptions => 
     { 
     listenOptions.UseHttps("mycert.pfx", "password"); 
     }); 
    }) 
    .Build(); 

のAzureにデプロイした後、私は502.5エラーを得た、と私は、この発見クーズーでイベントログを見て:

Application 'MACHINE/WEBROOT/APPHOST/BEASTMUFFIN' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'dotnet .\BeastMuffin.Web.dll', ErrorCode = '0x80004005 : e0434352. 

特定のエラーコードを検索して読んでいると、これはおそらく私のProgram.csに関連していて、すでにUseKestrel()メソッド呼び出しが心配されていました。

私はその行をコメントして再公開し、それは完全に機能しました。

元の質問に戻る... Webホストを構築するための新しいパターンに従うことができますが、ローカルで実行する場合は、UseKestrel()メソッドとそのオプションを追加しますか?

答えて

2

最初に私はあなたの巨大なファンだと言いたいと思います。 LearnVisualStudio.netで私の歯を切って、何年も前に、私の雇用主に(当時)私に平年の会員資格を買うように説得さえしました。ありがとうございます!

オプション#1:私はショーンWildermuthがあなたの目的のために働くかもしれない異なるPluralsight動画のカップルで、このコード(DEBUGの#if )を使用し、それを疑う見てきました。

public static IWebHost BuildWebHost(string[] args) => 
 
    WebHost.CreateDefaultBuilder(args) 
 
    .UseIISIntegration() 
 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
 
    .UseStartup<Startup>() 
 
#if DEBUG  
 
    .UseKestrel(options =>H 
 
    { 
 
     options.Listen(IPAddress.Loopback, 5001, listenOptions => 
 
     { 
 
     listenOptions.UseHttps("mycert.pfx", "password"); 
 
     }); 
 
    }) 
 
#endif  
 
    .Build();

オプション#2:プログラムのメインメソッドのシグネチャにIHostingEnvironmentを追加して、環境変数によって異なるHostBuildメソッドを呼び出します。

 public static void Main(string[] args, IHostingEnvironment env) 
 
     { 
 
      if (env.IsEnvironment("Development")) 
 
      { 
 
       BuildLocalWebHost(args).Run(); 
 
      } 
 
      else 
 
      { 
 
       BuildAzureWebHost(args).Run(); 
 
      } 
 
     }

希望これは正しい方向への一以上の点で役立ちますか。

+0

二重に良い答えです。 :)まず、#if DEBUGチップをありがとう。私はショーンが素晴らしい仕事をしていると聞いた。私は、盗作告発を恐れて他人のコンテンツを見るのを嫌っているだけです。また、私はあなたがそれのようなメソッド呼び出しのチェーンの真ん中でそれを使用することができるとは思わなかった!第二に、個人的なメモのおかげで。私はとても多くの人々の学習経験の一部になれてうれしいです。あなたに最高の願いを! –

+0

実際、私は後者のソリューションを最初に試しました。なぜなら、それは正しいと感じていたからです...しかし、IHostingEnvironmentはそれを渡すのですか?私の場合は、これを実行しようとするとエラーメッセージが表示されます:「プログラムには、エントリポイントに適した静的な「メイン」メソッドが含まれていません」 –

+0

さらに、もう1つのこと...実験から、メソッドは次のようにしなければなりません:BuildWebHost()...そうしないと、EF Core 2ツールが機能しません。私の意見では、これはドキュメントで十分に強調されていませんでした。 –

関連する問題