【发布时间】:2016-07-17 17:35:25
【问题描述】:
在 IIS 下运行时,有什么方法可以调试 ASP.NET Core Web 应用程序?
我在 IIS 下运行,因为我需要它在端口 443 上通过 SSL 可用。
【问题讨论】:
标签: ssl iis asp.net-core
在 IIS 下运行时,有什么方法可以调试 ASP.NET Core Web 应用程序?
我在 IIS 下运行,因为我需要它在端口 443 上通过 SSL 可用。
【问题讨论】:
标签: ssl iis asp.net-core
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>
【讨论】:
这真的有必要吗? 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 即可工作 - 无需手动附加。
【讨论】:
好处是您实际上可以使用实际主机名在外部使用该网站。想象一下,有一个 android 应用程序尝试连接到 localhost 以调试 asp.net 核心 web api 服务。除非您可以实际使用实际的物理 IP 地址并连接到在 iis 上运行的东西,否则设置起来很痛苦。就像以前那样。一切都可以完成,但这并不意味着如果它是新的,它就会自动变得更实用。没有旧的调试 iis 选项在生产力方面是一个倒退。
【讨论】:
刚刚浏览了历史,偶然发现了这个。 万一有人遇到这个问题……对我来说,解决方案很简单。 如果您在 .net 核心应用程序上使用身份验证,只需确保它使用 HTTP 的基本身份验证(用于调试部分)。 然后在 IIS 中简单地使用 Url Rewrite 为您的 http://localhost:someport .net 核心实例设置反向代理。 而已。问题解决了。 也许 url rewrite 很快就会支持 https,在这种情况下,使用 HTTP 的基本身份验证也可以用于调试目的。这会很棒。 但到目前为止,这个设置解决了我所有的问题。
【讨论】:
我一直在寻找一种解决方案,可以让我调试 .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 网址。
【讨论】:
先决条件:将“开发时 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”应用程序。
【讨论】:
我想针对 IIS 运行 ASP.NET Core 2.2 Web API 项目时遇到了同样的问题。
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iis": {
"applicationUrl": "http://localhost/AspNetCore22Starter",
"sslPort": 443
},
配置 https 绑定。此外,建议为 Web 应用程序定义一个特定的应用程序池,以便更容易找到附加过程
附加到进程 (Ctrl-Alt-P) + 找到 w3wp.exe 进程 + 选择用户名 = IIS APPPOOL\:
【讨论】:
我尝试了上述所有建议,但在我将所有缺失的元素放在一起之前没有任何效果。
在 IIS 中调试的基本部分是:
.NET Core 2.2 需要在 IIS 进程中运行您的站点。
这里有更多详细信息:http://intrinsicinnovation.com/Articles/2019/01/08/debugging-asp-net-core-applications-within-iis/
【讨论】: