web-dev-qa-db-ja.com

.netcore 2.2を使用し、「In Process」ホスティングモデルを使用する

.net core sdk 2.2に付属する新機能を試していましたが、これはパフォーマンスを約400%向上させることを意図したものです。

印象的だったので、ABPプロジェクトで試してみました

Template asp.net core mvc 4.0.2.0

次をweb.mv.cprojファイルに追加しました

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
  </ItemGroup>

残念ながら、このバージョンのABPフレームワークには互換性があるとは思いません。プロジェクトが単に実行に失敗してスローされるためです:(最終的に)

HTTPエラー500.30-ANCMインプロセス開始エラー

Web.configでstdoutLogEnabled="true"を設定して再試行した後、ログを確認しましたが、エントリはありません。

プロセス設定でasp.netコアに対して現在のABPを実行することに成功した人はいますか?

これはABP vNextでしか利用できないものだと思っています。

22
JohnB

Csprojのセクションを変更してみてください

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

次へ...

 <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
 </PropertyGroup>

https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-known-issues.md

44
Adam Mikulski

.vsフォルダーを削除し、インプロセスホスティングモデルで再試行してください。

5
Qamar Zaman

私の場合、私は最近、appstettings.jsonファイルのデータベース接続文字列を変更しました。ログを記録したり、エラーをキャッチしたりせずに、このエラーが発生して「HTTPエラー500.30-ANCMインプロセス開始エラー」エラーが発生したと思われます。

X-freestylerとTahir Khalidの間で、TahirがスタートアップでIOCの問題を示唆したのに気付いた。スタートアップは最近変更されていませんが、appstettings.jsonは変更されているため、appstettings.jsonの接続文字列が問題の原因であると判断しました。間違った接続文字列を修正し、問題は解決しました。コミュニティ全体に感謝します。

2
S.Mann

ASP.NET Core 2.2以降:インプロセスホスティングモデルを使用する64ビット(x64)自己完結型展開の場合、32ビット(x86)プロセスのアプリプールを無効にします。

IIS Managerの[アクション]サイドバー> [アプリケーションプール]で、[アプリケーションプールのデフォルトの設定]または[詳細設定]を選択します。 [32ビットアプリケーションを有効にする]を見つけて、値をFalseに設定します。

ソース:https://docs.Microsoft.com/en-us/aspnet/core/Host-and-deploy/iis/?view=aspnetcore-3.0#create-the-iis-site

2
DimaSUN

私の原因は、program.csのUseKestrel()にあります。2.2では.ConfigureKestrel()になります。

詳細は https://docs.Microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs=visual-studio&WT.mc_id=-blog-scottha #update-kestrel-configuration

1
maxisam

.csprojファイルのAspNetCoreHostingModel行を削除すると、うまくいきました。私の別のプロジェクトでは、うまく機能していたこのようなラインはありませんでした。

<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
1
HasanG

質問と同じエラーメッセージを表示することから始まる別の問題を見つけました。ここで共有しているので、プロジェクトファイルを変更する前に、サービスが適切に登録されていることを確認できます。

また、.netcore 2.2を実行していますが、同じエラーメッセージが表示されていたため、選択した回答と同じようにプロジェクトファイルをInProcessからOutOfProcessに変更しました。その後、「実装タイプをインスタンス化できません」というメッセージを受け取ったときに、問題の本当の原因を見つけました。この原因は次のとおりでした。

services.AddScoped<IMyService, IMyService>();

の代わりに

services.AddScoped<IMyService, MyService>();

関連記事: 汎用サービスで「実装タイプをインスタンス化できません」というエラーが表示されるのはなぜですか?

1
Cory Koch

場合によっては、JSON設定ファイルの解析を破損して防止するだけのタイプミスでした

1
Ozan BAYRAM

アプリケーションがクラッシュするため。この例外の時間を節約できる人!

また、エラーコードには、初期フェーズでファイルが見つからないために例外がスローされることが記載されています。環境設定セクションを参照してください。私のシナリオでは、次のコードを変更すると機能しました

var environment = whb.GetSetting("environment");

var environment = "Development";// whb.GetSetting("environment");

Appsettings.development.jsonがありますが、appsettings.production.jsonがないためです。正しい場所で別のものを探しているためにファイルが見つからない理由。

0
Hamit YILDIRIM

.Net Core 2.2では、InProcessホスティングモデルを使用できます。これは当然のことながら高速です。IISとアプリのKestrelサーバーの間にHTTPホップを追加することなく、すべてがIISで処理されます。このタグを追加することをお勧めします。AspNetCoreModuleV2新しいAspNetCoreModuleV2と古いAspNetCoreModuleオプションに注意してください。もう1つの重要なことは、Windowsアプリケーションイベントログを調べて、原因を特定することです。エラーメッセージはわかりにくいかもしれませんが、場合によっては、エラーの原因となったコード内の正確な行番号を指します。また、TFSでCI/CDを使用する場合、appsettings.jsonファイルに指定された値で適切に置き換えられなかった環境変数が存在する可能性があり、これは私にとって例外ソースの1つでした。

0
Mike Osipov

私にとっては、HostedServiceに誤ってDBContextが注入されました。私はこれに従って書き直しました:

DbContextインスタンスをIHostedServiceに注入する方法は?

すべてうまくいきました!

0
Michael Snytko

InProcessホスティングを使用してasp.netコアアプリケーションをIISでホストすることを決定するのに丸1日費やした後、この問題を解決できたことを誇りに思い、安心しました。問題を解決するために最善を尽くした同じフォーラム、ブログ、およびSOの質問を何度も繰り返したが、上記のすべてのアプローチに従った後も、私はまだ立ち往生していた。ここで、それを解決した経験を説明します。

ステップ1:IISでWebサイトを作成する

手順2:WebサイトのAppPoolの.Net CLRバージョンが「マネージコードなし」に設定され、AppPoolの「32ビットアプリケーションを有効にする」プロパティが設定されていることを確認->詳細設定がfalseに設定されている

ステップ3:プロジェクトが参照していることを確認する。Net core 2.2

ステップ4:ConfigureServicesメソッド内のstartup.csファイルに次の行を追加します

services.Configure<IISServerOptions>(options =>
{
     options.AutomaticAuthentication = false;
});

ステップ6:次のNugetパッケージを追加します

Microsoft.AspNetCore.App v2.2.5以降

Microsoft.AspNetCore.Server.IIS v2.2.2以降

ステップ7:.csprojファイルに次の行を追加します

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

ステップ8:コードをビルドして公開する(できればx64 bitness

ステップ9:etc/hostsファイルにWebサイトのホスト名を追加したことを確認します

ステップ10:World Wide Web発行サービスを再起動します

次に、asp.netコアアプリケーションをテストし、InProcessホスティングを使用してホストする必要がありますInProcessモードを使用してアプリがホストされているかどうかを確認するには、応答ヘッダーを確認し、次の行を含める必要があります

サーバー:Microsoft-IIS/10.0(IISのバージョンはシステム上で任意に変更できます)

Update:ダウンロードとインストール ASP.Net Core Hosting Bundle 動作に必要

0
mdowes

この公開プロファイル設定は私のために修正されました:

公開プロファイルの構成->設定->サイト拡張オプション->

  • [x] ASP.NET Core Site Extensionをインストールします。
0
ttugates