web-dev-qa-db-fra.com

Débogage des applications ASP.NET Core s'exécutant dans IIS

Est-il possible de déboguer une application Web ASP.NET Core tout en fonctionnant sous IIS? 

Je cours sous IIS parce que j'ai besoin qu'il soit disponible via SSL sur le port 443. 

26
Brandon F
  1. Publier une application Web avec la configuration Debug
  2. Configurez le site Web sur IIS comme décrit ici
  3. Ouvrir le site Web dans le navigateur pour lancer le processus dotnet
  4. Dans Visual Studio, ouvrez Debug -> Attach to Process ou appuyez sur Ctrl + Alt + P
  5. Assurez-vous que la ligne "Attacher à" contient "Automatique" ou "Géré (v4.6, v4.5, v4.0)". Sinon, appuyez sur select et choisissez "Déterminer automatiquement le type de code à déboguer"
  6. Cochez "Afficher les processus de tous les utilisateurs"
  7. Sélectionnez dotnet.exe et appuyez sur Joindre.

Remarque: Si vous voyez plusieurs processus dnx.exe, choisissez celui avec l'utilisateur IIS dans le nom d'utilisateur de la colonne. Par défaut, il s'agit de "APPUI IIS {nom de votre pool d'applications}"

P.S. Si vous voyez un processus dotnet avec un nom d'utilisateur vide, exécutez Visual studio en tant qu'administrateur.

METTRE À JOUR

Avec ASP.Net Core 1.0.0, vous devez attacher à "{youprojectnamet.exe}". Par exemple. si votre projet porte le nom "Web", vous devez joindre à "Web.exe" Vous pouvez également trouver le nom du dirigeant dans la section suivante de web.config.

<system.webServer>
   <aspNetCore processPath=".\Web.exe" />
</system.webServer>
50
Vitaly

L'avantage est que vous pouvez utiliser le site Web à l'extérieur en utilisant un nom d'hôte réel. Imaginez que vous ayez une application Android essayant de se connecter à localhost pour déboguer un service api web de base asp.net. Une tâche difficile à configurer, sauf si vous pouvez réellement utiliser une adresse IP physique réelle et vous connecter à quelque chose qui tourne sur IIS. Juste comme avant. Tout peut être fait, mais cela ne signifie pas que si c'est nouveau, c'est automatiquement plus pratique. Et ne pas avoir l’ancienne option de débogage est un recul en termes de productivité.

5
Looooooka

Est-ce vraiment nécessaire? Les applications ASP.NET Core s'exécutant en tant que processus externe sur IIS (à l'aide de dotnet.exe), le débogage via IIS n'a donc rien apporté. L'application dorsale reçoit les demandes via HTTP simple.

Pour plus d'informations sur le fonctionnement de l'hébergement IIS actuel avec ASP.NET Core, consultez cet article de blog: http://weblog.west-wind.com/posts/2016/ Juin/06/Publication-et-exécution-ASPNET-Core-Applications-with-IIS

Actuellement, Visual Studio ne prend pas en charge le débogage sous IIS complet. D'après ce que j'ai entendu, ceci n'est pas prévu non plus. Microsoft prend en charge l'exécution avec IIS Express et vous pouvez configurer un certificat pour IIS Express. 

Dans le projet ASP.NET Core, dans les options de projet de débogage, vous pouvez activer une option Enable SSL. IIS Express créera un certificat local et vous permettra de déboguer votre application à l'aide de SSL.

L'avantage de cette approche est que vous appuyez simplement sur F5 - aucune pièce jointe manuelle n'est requise.

enter image description here

5
Rick Strahl

Scénario: Débogage d'une application Web ASP.NET Core s'exécutant sur IIS Local.

Prérequis: ajoutez le "Support pour la durée de développement IIS" à votre installation Visual Studio existante. Suivez le lien suivant: https://blogs.msdn.Microsoft.com/webdev/2017/07/13/development-time-iis-support-for-asp-net-core-applications/


1. Dans Visual Studio 2017, créez "ASP.NET Core Web Application" avec le nom "MvcMovie".

1.1. Ouvrez le projet "MvcMovie" Properties.

1.1.2. Allez dans l'onglet "Debug" et définissez (si ce n'est pas le cas):

1.1.2.1. "Profil:" "MvcMovie".

1.1.2.2. "Launch:" "IIS"

1.1.2.3. (coché) "Lancer le navigateur:" " https: // localhost "

1.1.2.4. "Variables d'environnement:" | Nom: "ASPNETCORE_ENVIRONMENT" | Valeur: "Développement" |

1.1.2.5. "Paramètres du serveur Web"

1.1.2.5.1. "URL de l'application:" " https: // localhost "

1.1.2.5.2. (coché) "Activer l'authentification anonyme"

 enter image description here


2. Dans "IIS Local" manager "Ajouter un site Web" avec le nom "AspNetCoreMvcMovie".

2.1. Définissez "Chemin physique" avec le dossier du projet (PAS la solution) (dans notre cas, "D:\ASP-NET-Cœur\ASP-NET-Cœur-Projets\MvcMovie\MvcMovie").

2.2. Reliure "Type": "https".

2.3. "Certificat SSL": "Certificat de développement IIS Express".

2.4. Cliquez sur OK".

2.5. Dans le "Pool d'applications", recherchez le nom "Pool AspNetCoreMvcMovie".

2.5.1. Dans "Edit Application Pool", définissez "Version .NET CLR" sur "Aucun code géré".

2.5.2. Cliquez sur OK".

 enter image description here


3. Définissez les autorisations élevées VS 2017.

3.1. Si vous avez un massage comme celui-ci: "Microsoft Visual Studio": "Cette tâche nécessite des autorisations élevées pour l'application", suivez le dépannage "(Méthode 2), Résolution des problèmes de compatibilité" dans le lien suivant: https: // social. technet.Microsoft.com/wiki/contents/articles/46441.visual-studio-2017-this-task-requires-the-application-to-have-elevated-permissions.aspx

3.2 Après l'application de cette méthode (Méthode 2), VS-2017 commencera.

3.3. Exécuter (en mode "débogage") l'application "MvcMovie" avec le profil IIS (qui est configuré pour s'exécuter sur IIS local ... !!! PAS le IIS Express !!!). Dans notre cas, le profil est défini avec le nom de l'application en cours ("MvcMovie") à "l'étape 1.".

3.4. Attendez que l'application s'exécute dans le navigateur.

3.5. Fermez l'application (fermez le navigateur Web).

3.6. Allez dans la fenêtre de résolution des problèmes de compatibilité et cliquez sur "Suivant".

3.6.1. Cliquez ensuite sur "-> Oui, enregistrez ces paramètres pour ce programme".

3.6.2. Lorsque "Résolution des problèmes" a terminé "Enregistrement des paramètres", vous devez afficher la fenêtre "Le dépannage est terminé". Dans la fenêtre "Le dépannage est terminé", vous devez afficher: "Problèmes détectés" -> "Programme incompatible" -> "Résolu". Cliquez ensuite sur "-> Fermer le dépanneur".

4. À partir de VS-2017, exécutez (en mode "débogage") à nouveau l'application "MvcMovie" avec le profil IIS (dans notre cas, sous le nom "MvcMovie").

 enter image description here


2
Ted

Je recherchais une solution qui me permettrait de déboguer une sous-application .NET principale tout en étant exécuté sur un site Web hébergeant du code Classic ASP.

La solution de proxy inverse de Looooooka a fonctionné pour moi, mais il a fallu du travail pour la comprendre. 

1.) Ajoutez cette ligne à Startup.cs. 

app.UsePathBase("/core");  // core is the name of my subdirectory

Assurez-vous de le mettre AVANT la ligne qui dit "app.UseStaticFiles ();"

2.) Installer "URL Rewrite v2" et "Application Request Routing"

3.) Ajoutez un dossier sur le site Web IIS (/ core) et créez un fichier web.config dans le dossier, comme suit:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="IISExpressReverseProxy" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                    </conditions>
                    <action type="Rewrite" url="http://localhost:1306/core/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

4.) Ouvrez les propriétés du projet dans visual studio et accédez à l'onglet de débogage. Changez l'URL "Lancer le navigateur" en votre URL IIS.

0
Mike Olund

Je viens de parcourir l’histoire et je suis tombé sur celui-ci… .. Au cas où tout le monde en viendrait à cette question… la solution pour moi s’est avérée être très simple… .. Si vous utilisez l’authentification sur votre noyau .net Assurez-vous simplement qu'il utilise une authentification de base avec HTTP (pour la partie de débogage) . Puis, dans IIS, utilisez simplement Url Rewrite pour configurer un proxy inverse vers votre http: // localhost: someport . net core instance . C'est tout. Problème résolu . Peut-être que la réécriture d'URL supportera bientôt https et dans ce cas, l'auth basic utilisant HTTP peut également être utilisé à des fins de débogage. Ce qui serait génial . Mais jusqu'à présent, cette configuration a résolu tous mes problèmes.

0
Looooooka

J'ai eu le même problème pour un projet API Web ASP.NET Core 2.2 que je voulais exécuter contre IIS.

launchsettings.json

  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iis": {
      "applicationUrl": "http://localhost/AspNetCore22Starter",
      "sslPort": 443
    },

IIS

Configurez la liaison https. Il est également recommandé de définir un pool d'applications spécifique pour l'application Web afin de faciliter la recherche du processus de rattachement.

Joindre au processus

Joindre au processus (Ctrl-Alt-P) + rechercher le processus w3wp.exe + choisir celui dont le nom d'utilisateur est = IIS APPPOOL \:

 Hosting process for ASP.NET Core 2.2 application

0
Alexei

J'ai essayé toutes les suggestions ci-dessus, mais rien n'a fonctionné jusqu'à ce que je réunisse tous les éléments manquants.

Les éléments essentiels du débogage dans IIS sont les suivants:

  • Configurer IIS correctement sur votre dev. machine
  • Installation d'un certificat SSL pour votre site IIS
  • Ajout de la prise en charge de l'heure de développement IIS à partir du programme d'installation de Visual Studio
  • Installation d'au moins .NET Core SDK 2.2
  • Configuration de votre profil de lancement dans Visual Studio pour lancer votre navigateur à l’aide de IIS.

.NET Core 2.2 est nécessaire pour exécuter votre site DANS LE processus IIS.

Voici plus de détails: http://intrinsicinnovation.com/Articles/2019/01/08/debugging-asp-net-core-applications-within-iis/

0
Chris J