web-dev-qa-db-fra.com

Utilisation de .net core 2.2 et du modèle d’hébergement `In Process`

J'essayais une nouvelle fonctionnalité fournie avec .net core SDK 2.2, censée améliorer les performances d'environ 400%.

Impressionnant alors je l'ai essayé sur mon projet ABP

Template asp.net core mvc 4.0.2.0

J'ai ajouté ce qui suit à mon fichier 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>

Malheureusement, je ne pense pas que cette version du framework ABP soit compatible car le projet ne parvient tout simplement pas à s'exécuter et lance: (éventuellement)

Erreur HTTP 500.30 - Échec de démarrage de processus en cours ANCM

J'ai vérifié les journaux après avoir défini stdoutLogEnabled="true" dans le fichier Web.config et réessayé - mais aucune entrée.

Quelqu'un a-t-il déjà réussi à exécuter le PBA actuel par rapport à un noyau asp.net en cours de configuration?

Je pense que cela pourrait n'être disponible que dans ABP vNext.

22
JohnB

Essayez de changer la section dans csproj

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

à ce qui suit ...

 <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

Supprimez le dossier .vs et réessayez avec le modèle d'hébergement in-process.

5
Qamar Zaman

Dans mon cas, j'avais récemment changé une chaîne de connexion à la base de données dans mon fichier appstettings.json. Sans journalisation ni erreur sur place, je soupçonne que cette erreur a été provoquée par l'erreur "Erreur HTTP 500.30 - Échec du démarrage en cours de traitement ANCM".

Il m'est arrivé de remarquer l'échange entre x-freestyler et Tahir Khalid, Tahir suggérant un problème de démarrageIOC. Depuis que mon démarrage n'a pas changé récemment, mais mon appstettings.json avait - j'ai déterminé que la chaîne de connexion dans mon appstettings.json était la cause du problème. J'ai corrigé une chaîne de connexion incorrecte et le problème a été résolu. Merci à toute la communauté.

2
S.Mann

ASP.NET Core 2.2 ou version ultérieure: pour un déploiement autonome 64 bits (x64) utilisant le modèle d'hébergement in-process, désactivez le pool d'applications pour les processus 32 bits (x86).

Dans la barre latérale Actions de IIS Manager> Pools d'applications, sélectionnez Définir les paramètres par défaut du pool d'applications ou Paramètres avancés. Recherchez Activer les applications 32 bits et définissez la valeur sur False.

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

2
DimaSUN

Le mien est à cause de UseKestrel () dans program.cs Il devrait être .ConfigureKestrel () dans 2.2

plus d'infos sur 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

Supprimer la ligne AspNetCoreHostingModel dans le fichier .cproj a fonctionné pour moi. Il n’y avait pas une telle ligne dans un autre projet mien qui fonctionnait bien.

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

J'ai trouvé un autre problème qui commence par donner le même message d'erreur que dans la question. Je partage ceci ici afin qu'avant de changer le fichier de projet, vous puissiez vous assurer que vos services sont correctement enregistrés.

J'exécute également .netcore 2.2 et recevais le même message d'erreur. J'ai donc modifié le fichier de projet d'InProcess en OutOfProcess comme dans la réponse sélectionnée. Après cela, j’ai trouvé la véritable cause de mon problème lorsque j’ai reçu le message "Impossible d’instancier le type d’implémentation": la cause en était la suivante:

services.AddScoped<IMyService, IMyService>();

au lieu de

services.AddScoped<IMyService, MyService>();

Article connexe: Pourquoi le message d'erreur "Impossible d'instancier le type d'implémentation" apparaît-il pour mon service générique?

1
Cory Koch

Au cas où c’était juste une faute de frappe qui corrompt et empêche l’analyse du fichier de paramètres JSON

1
Ozan BAYRAM

Parce que l'application se bloque. Pour qui gagne du temps sur cette exception!

Et le code d'erreur dit qu'il lève une exception car il ne peut pas trouver un fichier dans la phase initiale. Voir la section Paramètres d'environnement. Dans mon scénario, cela a fonctionné quand j'ai changé le code suivant

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

à

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

Parce que j'ai appsettings.development.json mais je n'avais pas appsettings.production.json. Pourquoi ne trouve-t-il aucun fichier parce qu’il cherche quelque chose de différent au bon endroit.

0
Hamit YILDIRIM

Avec .Net Core 2.2, vous devriez pouvoir utiliser le modèle d’hébergement InProcess, car il est naturellement plus rapide: tout est traité dans IIS, sans saut HTTP supplémentaire entre IIS et le serveur Kestrel de votre application. Une chose que vous voudrez peut-être faire est d’ajouter cette balise: AspNetCoreModuleV2 Notez la nouvelle option AspNetCoreModuleV2 vs l’ancienne AspNetCoreModule. Une autre chose importante à faire est d’examiner le journal des événements de l’application Windows pour identifier le coupable. Bien que les messages d'erreur puissent être cryptiques, ils indiquent parfois les numéros de ligne exacts dans le code qui ont causé l'échec. De plus, si vous utilisez CI/CD avec TFS, il peut y avoir des variables d'environnement dans le fichier appsettings.json qui n'ont pas été remplacées correctement par leurs valeurs désignées, ce qui est l'une des sources d'exception pour moi.

0
Mike Osipov

Pour moi, DBContext a été injecté à tort dans HostedService. Je l'ai réécrit en fonction de ceci:

Comment dois-je injecter une instance de DbContext dans un IHostedService?

et tout a bien fonctionné!

0
Michael Snytko

Après avoir passé une journée entière à me battre pour décider d'héberger mon application principale asp.net sur IIS avec l'hébergement InProcess, je suis enfin fier et soulagé de voir que cela est résolu. Des heures à parcourir à plusieurs reprises les mêmes forums, blogs et SO questions qui ont fait de leur mieux pour résoudre le problème. J'étais toujours bloquée après avoir suivi toutes les approches mentionnées ci-dessus. Maintenant, je vais décrire mon expérience de le résoudre.

Étape 1: créer un site Web dans IIS

Étape 2: Assurez-vous que la version .Net CLR de l'AppPool du site Web est définie sur "Aucun code géré" et que la propriété "Activer les applications 32 bits" dans AppPool -> Paramètres avancés est définie sur false

Étape 3: Assurez-vous que votre projet référence . Net Core 2.2

Étape 4: ajoutez la ligne suivante dans votre fichier startup.cs dans la méthode ConfigureServices

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

Étape 6: Ajoutez les packages Nuget suivants

Microsoft.AspNetCore.App v2.2.5 ou supérieur

Microsoft.AspNetCore.Server.IIS v2.2.2 ou supérieur

Étape 7: Ajouter la ligne suivante à votre fichier .csproj

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

Étape 8: Construisez et publiez votre code (de préférence x64 bitness )

Étape 9: Assurez-vous que vous avez ajouté le nom d'hôte de votre site Web dans le fichier etc/hosts.

Étape 10: redémarrez le service de publication World Wide Web

Testez maintenant votre application principale asp.net et elle devrait être hébergée à l'aide de l'hébergement InProcess. Pour vérifier si votre application est hébergée à l'aide du mode InProcess, cochez les en-têtes de réponse et indiquez la ligne suivante.

Serveur: Microsoft-IIS/10.0 (la version IIS pourrait être une version quelconque de votre système)

Mise à jour : Téléchargez et installez Kit d'hébergement ASP.Net Core requis pour que cela fonctionne

0
mdowes

Ce paramètre de profil de publication a été corrigé pour moi:

Configurer le profil de publication -> Paramètres -> Options des extensions de site ->

  • [x] Installez l’extension de site ASP.NET Core.
0
ttugates