【问题标题】:Debugging ASP.NET Core applications running in IIS调试在 IIS 中运行的 ASP.NET Core 应用程序
【发布时间】:2016-07-17 17:35:25
【问题描述】:

在 IIS 下运行时,有什么方法可以调试 ASP.NET Core Web 应用程序?

我在 IIS 下运行,因为我需要它在端口 443 上通过 SSL 可用。

【问题讨论】:

    标签: ssl iis asp.net-core


    【解决方案1】:
    1. 使用调试配置发布 Web 应用程序
    2. 按照here 的描述在 IIS 上设置网站
    3. 在浏览器中打开网站以启动 dotnet 进程
    4. 在 Visual Studio 中打开 Debug -> Attach to Process 或按 Ctrl+Alt+P
    5. 确保在“附加到”行中有“自动”或“托管(v4.6、v4.5、v4.0)”。如果没有,请按选择并选择“自动确定要调试的代码类型”
    6. 选中“显示所有用户的进程”
    7. 选择dotnet.exe并按附加

    注意:如果您看到多个 dnx.exe 进程,请在用户名列中选择具有 IIS 用户的进程。默认为“IIS APPPOOL{您的应用程序池名称}”

    附:如果您看到用户名为空的 dotnet 进程,请以管理员身份运行 Visual Studio

    更新

    对于 ASP.Net Core 1.0.0,您必须附加到“{youprojectnamet.exe}”。例如。如果您的项目名称为“Web”,则必须附加到“Web.exe” 您还可以在 web.config 的以下部分中找到执行者的名称

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

    【讨论】:

    • 这可行,但我注意到您无法进入 dotnet 核心框架代码,甚至无法在框架的调用堆栈中看到事物的真实名称。如果有人找到某种方法,请更新此答案。
    • 这个运气好吗?我不能让它工作吗?我发布了调试,并尝试以多种方式附加。它只是不会达到我的断点。
    • 如何发布带有调试配置的应用程序?
    • 右键单击项目,选择发布,在设置选项卡上选择以单词 Debug 开头的配置
    • 感谢有关附加到 projectname.exe 的提示。这只是附加到 IISExpress.exe 的习惯。
    【解决方案2】:

    这真的有必要吗? ASP.NET Core 应用程序作为 IIS 的外部进程运行(使用 dotnet.exe),因此通过 IIS 进行调试实际上没有任何收获。后端应用程序通过纯 HTTP 获取请求。

    有关实际 IIS 托管如何与 ASP.NET Core 一起工作的更多信息,您可能需要查看此博客文章: http://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications-with-IIS

    Visual Studio 目前不支持在完整的 IIS 下进行调试,据我所知,这也不是计划中的事情。 Microsoft 确实支持使用 IIS Express 运行,您可以为 IIS Express 设置证书。

    在 ASP.NET Core 项目的“调试项目”选项中,您可以启用一个 启用 SSL 选项。 IIS Express 将创建一个本地证书并让您使用 SSL 调试您的应用程序。

    这种方法的好处是只需按 F5 即可工作 - 无需手动附加。

    【讨论】:

    • 它在不编译的情况下为视图启用“保存/重新加载”场景,不是吗?
    • Visual Studio 一直支持在完整 IIS 下进行调试。
    • 如果我需要调试来自其他机器/设备的请求怎么办? IIS Express 是否处理远程连接?
    • Bonner - 但不是 ASP.NET Core 调试。不像 Vitaly 使用 Kestrel 的显式进程附件所概述的那样。 Lserson - IIS Express 可用于远程连接,但您必须对其进行配置并打开防火墙。有关更多信息,请参阅此博客文章:weblog.west-wind.com/posts/2016/Sep/28/…
    • 我对 ASP .NET Core 最怀念的是 不必 必须按 CTRL+F5 来运行(或 F5 来调试)。您只需构建,导航到 localhost(或您配置的任何绑定)并运行您的代码...
    【解决方案3】:

    好处是您实际上可以使用实际主机名在外部使用该网站。想象一下,有一个 android 应用程序尝试连接到 localhost 以调试 asp.net 核心 web api 服务。除非您可以实际使用实际的物理 IP 地址并连接到在 iis 上运行的东西,否则设置起来很痛苦。就像以前那样。一切都可以完成,但这并不意味着如果它是新的,它就会自动变得更实用。没有旧的调试 iis 选项在生产力方面是一个倒退。

    【讨论】:

    • 我的用例是我正在编写一个 Alexa 服务,它通过 443 上的 https 与我的盒子通信。
    • 我的意思是,有用的讨论,但你能说这如何回答 OP 的问题吗?
    【解决方案4】:

    刚刚浏览了历史,偶然发现了这个。 万一有人遇到这个问题……对我来说,解决方案很简单。 如果您在 .net 核心应用程序上使用身份验证,只需确保它使用 HTTP 的基本身份验证(用于调试部分)。 然后在 IIS 中简单地使用 Url Rewrite 为您的 http://localhost:someport .net 核心实例设置反向代理。 而已。问题解决了。 也许 url rewrite 很快就会支持 https,在这种情况下,使用 HTTP 的基本身份验证也可以用于调试目的。这会很棒。 但到目前为止,这个设置解决了我所有的问题。

    【讨论】:

      【解决方案5】:

      我一直在寻找一种解决方案,可以让我调试 .NET 核心子应用,同时在托管经典 ASP 代码的网站上运行。

      Looooooka 的反向代理解决方案对我有用,但需要一些工作才能弄清楚。

      1.) 将此行添加到 Startup.cs。

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

      确保将其放在“app.UseStaticFiles();”行之前

      2.) 安装“URL Rewrite v2”和“Application Request Routing”

      3.) 向 IIS 网站 (/core) 添加一个文件夹,并在该文件夹中创建一个 web.config 文件,如下所示:

      <?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.) 在 Visual Studio 中打开项目属性,然后转到调试选项卡。将“启动浏览器”网址更改为您的 IIS 网址。

      【讨论】:

        【解决方案6】:

        场景:调试在 IIS Local 上运行的 ASP.NET Core Web 应用程序。

        先决条件:将“开发时 IIS 支持”添加到现有的 Visual Studio 安装中。点击下一个链接:https://blogs.msdn.microsoft.com/webdev/2017/07/13/development-time-iis-support-for-asp-net-core-applications/


        1.在 Visual Studio 2017 中创建名为“MvcMovie”的“ASP.NET Core Web 应用程序”。

        1.1。打开“MvcMovie”项目Properties

        1.1.2。转到“调试”选项卡并设置(如果没有):

        1.1.2.1。 “简介:”“MvcMovie”。

        1.1.2.2。 "启动:" "IIS"

        1.1.2.3。 (选中)“启动浏览器:”“https://localhost

        1.1.2.4。 “环境变量:” |名称:“ASPNETCORE_ENVIRONMENT” |价值观:“发展”|

        1.1.2.5。 “网络服务器设置”

        1.1.2.5.1。 "应用网址:" "https://localhost"

        1.1.2.5.2。 (选中)“启用匿名身份验证”


        2。在“IIS 本地”管理器“添加网站”中,名称为“AspNetCoreMvcMovie”。

        2.1。使用项目(不是解决方案)文件夹(在我们的例子中为“D:\ASP-NET-Core\ASP-NET-Core-Projects\MvcMovie\MvcMovie”)设置“物理路径”。

        2.2。绑定“类型”:“https”。

        2.3。 “SSL 证书”:“IIS Express 开发证书”。

        2.4。点击“确定”。

        2.5。进入“应用程序池”,按名称找到“AspNetCoreMvcMovie”池。

        2.5.1。进入“编辑应用程序池”,将“.NET CLR 版本”设置为“无托管代码”。

        2.5.2。点击“确定”。


        3.设置 VS 2017 提升的权限。

        3.1。如果我们有这样的消息:“Microsoft Visual Studio”:“此任务需要应用程序具有提升的权限”,请按照下一个链接中的故障排除“(方法 2)故障排除兼容性”: https://social.technet.microsoft.com/wiki/contents/articles/46441.visual-studio-2017-this-task-requires-the-application-to-have-elevated-permissions.aspx

        3.2 完成此方法(方法二)后,VS-2017将启动。

        3.3。使用 IIS 配置文件运行(在“调试”模式下)“MvcMovie”应用程序(设置为在 IIS Local 上运行……!!!不是 IIS Express !!!)。在我们的案例中,配置文件在“步骤 1”中设置为当前应用程序的名称(“MvcMovie”)。

        3.4。等待应用程序在浏览器中运行。

        3.5。关闭应用程序(关闭网络浏览器)。

        3.6。转到兼容性故障排除窗口,然后单击“下一步”。

        3.6.1。然后点击“->是的,为这个程序保存这些设置”。

        3.6.2。在“解决问题”完成“保存设置”后,我们必须查看“故障排除已完成”窗口。在“故障排除已完成”窗口中,必须查看:“发现的问题”->“不兼容的程序”->“已修复”。然后点击“->关闭疑难解答”。

        4.从 VS-2017 开始,使用 IIS 配置文件(在我们的例子中名为“MvcMovie”)再次运行(在“调试”模式下)“MvcMovie”应用程序。


        【讨论】:

        【解决方案7】:

        我想针对 IIS 运行 ASP.NET Core 2.2 Web API 项目时遇到了同样的问题。

        launchsettings.json

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

        IIS

        配置 https 绑定。此外,建议为 Web 应用程序定义一个特定的应用程序池,以便更容易找到附加过程

        附加到进程

        附加到进程 (Ctrl-Alt-P) + 找到 w3wp.exe 进程 + 选择用户名 = IIS APPPOOL\:

        【讨论】:

          【解决方案8】:

          我尝试了上述所有建议,但在我将所有缺失的元素放在一起之前没有任何效果。

          在 IIS 中调试的基本部分是:

          • 在您的开发人员上正确配置 IIS。机器
          • 为您的 IIS 站点安装 SSL 证书
          • 从 Visual Studio 安装程序添加 Development Time IIS 支持
          • 至少安装 .NET Core SDK 2.2
          • 在 Visual Studio 中设置启动配置文件以使用 IIS 启动浏览器。

          .NET Core 2.2 需要在 IIS 进程中运行您的站点。

          这里有更多详细信息:http://intrinsicinnovation.com/Articles/2019/01/08/debugging-asp-net-core-applications-within-iis/

          【讨论】:

          • 链接很好,但答案可能需要更多信息才能独立存在。如果链接失效,MS' docs here 描述了类似的步骤。 “开发时间 IIS 支持”可能是关键搜索词组。
          猜你喜欢
          • 1970-01-01
          • 2021-08-26
          • 1970-01-01
          • 2018-06-02
          • 2016-05-23
          • 2019-09-26
          • 1970-01-01
          • 2016-03-06
          • 2011-05-06
          相关资源
          最近更新 更多