调试在使用Kestrel托管的ASP.NET 5 API项目中引用的DNX项目时,不会遇到断点(所有这些项目都位于同一解决方案和src文件夹中).使用IIS Express进行调试工作正常.
可以采取哪些故障排除步骤来解决此问题?
在调试时没有使用DNX项目创建二进制文件或PDB,所以我不确定从哪里开始.
project.json命令:
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},
Run Code Online (Sandbox Code Playgroud)
项目属性:
注意:1.0.0-rc1-final在所有项目中使用RC1 库.
1.0.0-rc1-update1DNX运行时.我已经卸载了所有其他运行时.project.lock.json文件并恢复了DNU.global.json正在使用正确的运行时:
{
"projects": [ "src", "test", "." ],
"sdk": {
"version": "1.0.0-rc1-update1",
"runtime": "clr",
"architecture": "x86"
}
}
Run Code Online (Sandbox Code Playgroud)在Modules窗口中,我可以看到项目符号未加载:
我怎样才能解决这个问题?
我发现只有在同时运行多个启动项目时才会出现此问题.运行单个项目时,调试在解决方案中的所有项目中都能正常运行.
我不知道如何解决这个问题以及它为什么会发生.
我们正在设置现有的Web API服务器,以便与现有API一起提供站点.我一直在松散地阅读这篇文章.
这是我的Global.asax.cs的样子:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
AutoMapperConfig.RegisterMappings();
var host = new WebHostBuilder()
.UseKestrel()
.UseWebRoot("wwwroot")
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
Run Code Online (Sandbox Code Playgroud)
和Startup.cs:
public partial class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseDefaultFiles();
app.UseStaticFiles();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行项目时,我收到错误
无法加载DLL"libuv":找不到指定的模块.(来自HRESULT的异常:0x8007007E)
libuv是Kestrel的依赖.如果我手动将它从packages文件夹复制到bin文件夹,它可以工作.这个GitHub问题评论似乎有意义.现在project.json正在被移走,我怎样才能让它自动复制?
有些人认为它不知道是否使用32位或64位版本的libuv,因为平台在项目属性中设置为Any CPU.我已尝试在解决方案和项目设置中将其设置为x64,问题仍然存在.
如何自动将libuv.dll直接复制到构建目录?
我不考虑在项目中包含该文件(而不是在packages文件夹中)并将其设置为复制到输出目录的真正解决方案,只是一种解决方法.我希望找到解决方案,而不是解决方法.
我们的目标是使用Kubernetes横向扩展.NET Core 2.0 Web API.Web API应用程序将由Kestrel提供.
看起来我们可以通过配置Kestrel的关闭超时来优雅地处理pod的终止,所以现在我们正在研究如何探测应用程序以确定准备和活跃度.
仅使用HTTP请求探测Web API是否足够?如果是这样,创建一个新的健康检查控制器以处理这些探测请求是一个好主意,还是探测在正常使用中消耗的实际端点更有意义?
在区分活跃度和准备度探测时,我们应该考虑什么?
kubernetes kestrel-http-server asp.net-core asp.net-core-webapi
我想从AWS Amazon Linux AMI实例运行.NET Core MVC网站.
以下是我到目前为止采取的步骤:
sudo yum update -ysudo yum install libunwind -ysudo yum install gettext -ycurl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnetsudo ln -s ~/dotnet/dotnet /usr/local/bincurl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.shsource /home/ec2-user/.dnx/dnvm/dnvm.sh我们想知道大多数用例是否确实需要反向代理,并且希望获得更多信息。
Kerstel/Nginx 文档声称:“Kestrel 非常适合从 ASP.NET Core 提供动态内容。但是,Web 服务功能不如 IIS、Apache 或 Nginx 等服务器功能丰富。反向代理服务器可以卸载诸如提供静态内容、缓存请求、压缩请求和来自 HTTP 服务器的 HTTPS 终止等工作。反向代理服务器可以驻留在专用机器上,也可以与 HTTP 服务器一起部署。” https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2
如果这在当今确实相关,有人可以分享一些见解吗?
在我们的用例中,我们使用带有外部负载平衡 (AWS ALB) 的 Docker 实例。每个 docker 实例都运行着 Nginx 和我们的 ASP.NET Core 应用程序。我们无法弄清楚使用 Nginx 的确切好处。
提供静态内容 由于我们使用的是外部 CRN (AWS CloudFront),我认为静态缓存并没有真正的好处,是吗?
缓存请求我相信这与提供静态内容相同,因为在大多数情况下(在我们的用例 - 所有情况下)都不会缓存动态内容。
压缩请求 ASP.NET Core 有一个响应压缩中间件 - 它声称“中间件的性能可能与服务器模块的性能不匹配。HTTP.sys 服务器服务器和 Kestrel 服务器目前不提供内置压缩支持。”。也许可以创建一些基准来验证这一说法。 https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2
从 HTTP 服务器终止 HTTPS 我假设大多数具有负载平衡器的客户端可以跳过这部分,因为如果需要,可以在负载平衡器上完成 HTTPS 终止。
谢谢!艾菲
kestrel-http-server asp.net-core asp.net-docker-extensions asp.net-core-2.2
这里的 ASP.Net核心文档有一个很好的控制台日志记录输出,如下图所示,各种LogLevels的颜色.我现在已经在Visual Studio中创建了一个应用程序,我发现它现在在IIS Express后运行,我再也看不到控制台了.我记得当我确实运行测试版时,它确实直接用这个漂亮的控制台输出弹出Kestrel.
现在可以获得这个漂亮的窗口吗?
PS文档仍然包含您甚至无法看到的这些图像,这有点奇怪.
我编写了以下MVC控制器来测试取消功能:
class MyController : Controller
{
[HttpGet("api/CancelTest")]
async Task<IActionResult> Get()
{
await Task.Delay(1000);
CancellationToken token = HttpContext.RequestAborted;
bool cancelled = token.IsCancellationRequested;
logger.LogDebug(cancelled.ToString());
return Ok();
}
}
Run Code Online (Sandbox Code Playgroud)
说,我想取消请求,因此在上面的控制器操作中记录值' true '.如果服务器实现IHttpRequestLifetimeFeature,这可能是服务器端.幸运的是,Kestrel确实如此,这可以通过以下方式实现:
var feature = (IHttpRequestLifetimeFeature) HttpContext.Features[typeof(IHttpRequestLifetimeFeature)];
feature.Abort();
Run Code Online (Sandbox Code Playgroud)
但问题是我想在客户端取消请求.例如,在浏览器中.在ASP.NET MVC/WebApi的预核版本中,如果浏览器中止请求,则取消令牌将自动取消.示例:在Chrome中多次刷新页面.在chrome dev工具的"网络"选项卡中,您现在可以看到取消上一个(未完成的)请求.
问题是:在Kestrel上运行的ASP.NET Core中,我只能在日志中看到以下条目:
Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException:错误-4081 ECANCELED操作已取消
因此,来自浏览器的中止请求到达并由Kestrel网络服务器处理.但它不会影响控制器中HttpContext的RequestAborted属性,因为该方法仍会记录值' false '.
问题: 有没有办法中止/取消我的控制器方法,以便将HttpContext.RequestAborted属性标记为已取消?
也许我可以做一些订阅Kestrel的操作取消触发器并调用IHttpRequestLifetimeFeature.Abort()方法的东西?
更新: 我做了一些进一步的测试,看起来HttpRequest IS实际上已经中止,但在实际取消之前似乎有某种延迟.延迟不是时间因素,似乎直接来自libuv(Kestrel网络服务器构建在其上的库).我在https://github.com/aspnet/KestrelHttpServer/issues/1103上发布了更多信息
更多更新: 问题已移至另一个,因为前一个包含多个问题.https://github.com/aspnet/KestrelHttpServer/issues/1139
cancellation asp.net-core-mvc kestrel-http-server asp.net-core
我的理解是ASP.NET Core中间件是在准备好处理请求时运行的.但是如果应用程序处于负载状态并且ASP.NET Core无法处理所有请求,那么它们会被置于某个"队列"中?我不知道这是否是Kestrel内部的一些托管队列,或者它是否与libuv有关.
我希望能够知道给定请求在此队列中花费了多长时间.HttpContext上有什么东西可以告诉我这个吗?
提前致谢
我知道之前已经多次询问过这个问题,但遗憾的是,不是关于ASP.NET核心网络应用程序,而是经典的ASP.NET网络应用程序.我在互联网上找到的所有答案都没有帮助我,因为ASP.NET核心应用程序的IIS配置与传统的ASP.NET有很大不同.例如,ASP.NET Core使用Kestrel代理,因此ASP.NET中的许多配置都不在ASP.NET Core中.我基本上已经尝试过我可能在互联网上找到的所有内容,但没有人帮助过我.我想它就像在IIS中的应用程序上启用匿名和Windows身份验证一样简单,就是这样,但我想它会比这更有用.
在单个asp.net核心Web应用程序中启用这些身份验证的过程是什么?
是否可以删除ASP.NET Core 2.1应用程序中的服务器响应标头(在带有IIS 10的Server 2016上运行)?
我尝试将以下内容放在web.config中:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="sameorigin" />
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="X-Content-Type-Options" value="nosniff" />
<remove name="X-Powered-By" />
<remove name="Server" />
</customHeaders>
</httpProtocol>
</sytem.webServer>
Run Code Online (Sandbox Code Playgroud)
响应的前四个更改工作正常,但未删除Server标头.我还是看"红隼"
web-config kestrel-http-server asp.net-core asp.net-core-2.1
asp.net-core ×8
c# ×4
amazon-ec2 ×1
asp.net ×1
cancellation ×1
dnx ×1
iis-8 ×1
kubernetes ×1
linux ×1
web-config ×1