标签: kestrel-http-server

ASP.NET 5,DNX和Kestrel:没有遇到断点

调试在使用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 库.

编辑:

  • Startup.cs项目中的断点很好,但在其他项目中却没有.
  • 我已经仔细检查并重新安装了1.0.0-rc1-update1DNX运行时.我已经卸载了所有其他运行时.
  • 我已经确认PATH正确反映了DNX运行时.
  • 我删除了所有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)

编辑2:

在Modules窗口中,我可以看到项目符号未加载:

模块

我怎样才能解决这个问题?

编辑3:

我发现只有在同时运行多个启动项目时才会出现此问题.运行单个项目时,调试在解决方案中的所有项目中都能正常运行.

在此输入图像描述

我不知道如何解决这个问题以及它为什么会发生.

asp.net-core-mvc dnx kestrel-http-server asp.net-core

17
推荐指数
1
解决办法
1120
查看次数

红隼与IIS - 运行时缺少libuv.dll

我们正在设置现有的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文件夹中)并将其设置为复制到输出目录的真正解决方案,只是一种解决方法.我希望找到解决方案,而不是解决方法.

c# asp.net asp.net-web-api kestrel-http-server

17
推荐指数
1
解决办法
2051
查看次数

适用于Kestrel .NET Core Web API的适当的Kubernetes准备和活动探测器

我们的目标是使用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

17
推荐指数
2
解决办法
907
查看次数

如何在AWS Linux实例上运行.NET Core MVC站点

我想从AWS Amazon Linux AMI实例运行.NET Core MVC网站.

以下是我到目前为止采取的步骤:

  1. 在Visual Studio 2015中创建模板ASP.NET核心Web应用程序(.NET核心) - C# - MVC Web应用程序项目.在IIS Express中编译并运行应用程序.没有对任何配置进行任何更改(web.confg,project.json等).
  2. 将整个Web应用程序解决方案上传到GitHub.
  3. 启动Amazon Linux AMI(2016.03.2)实例.为简单起见,安全组现在打开"所有流量"访问权限.
  4. 使用PuTTY SSH进入Linux实例.使用ec2-user登录.
  5. 更新实例 sudo yum update -y
  6. 安装libunwind sudo yum install libunwind -y
  7. 安装gettext sudo yum install gettext -y
  8. 安装.NET Core curl -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 ~/dotnet
  9. 链接 sudo ln -s ~/dotnet/dotnet /usr/local/bin
  10. 安装.NET版本管理器(DNVM) curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
  11. 运行命令 source /home/ec2-user/.dnx/dnvm/dnvm.sh
  12. 安装 …

linux amazon-ec2 asp.net-core-mvc kestrel-http-server

16
推荐指数
1
解决办法
8176
查看次数

ASP.NET 核心实际上需要反向代理吗?

我们想知道大多数用例是否确实需要反向代理,并且希望获得更多信息。

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 的确切好处。

  1. 提供静态内容 由于我们使用的是外部 CRN (AWS CloudFront),我认为静态缓存并没有真正的好处,是吗?

  2. 缓存请求我相信这与提供静态内容相同,因为在大多数情况下(在我们的用例 - 所有情况下)都不会缓存动态内容。

  3. 压缩请求 ASP.NET Core 有一个响应压缩中间件 - 它声称“中间件的性能可能与服务器模块的性能不匹配。HTTP.sys 服务器服务器和 Kestrel 服务器目前不提供内置压缩支持。”。也许可以创建一些基准来验证这一说法。 https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2

  4. 从 HTTP 服务器终止 HTTPS 我假设大多数具有负载平衡器的客户端可以跳过这部分,因为如果需要,可以在负载平衡器上完成 HTTPS 终止。

谢谢!艾菲

kestrel-http-server asp.net-core asp.net-docker-extensions asp.net-core-2.2

16
推荐指数
1
解决办法
1983
查看次数

如何使用IIS Express在ASP.NET Core中获取控制台输出

这里的 ASP.Net核心文档有一个很好的控制台日志记录输出,如下图所示,各种LogLevels的颜色.我现在已经在Visual Studio中创建了一个应用程序,我发现它现在在IIS Express后运行,我再也看不到控制台了.我记得当我确实运行测试版时,它确实直接用这个漂亮的控制台输出弹出Kestrel.

现在可以获得这个漂亮的窗口吗?

PS文档仍然包含您甚至无法看到的这些图像,这有点奇怪.

在此输入图像描述

c# kestrel-http-server asp.net-core

15
推荐指数
2
解决办法
3万
查看次数

HttpRequest在ASP.NET Core MVC中没有中止(取消)浏览器中止

我编写了以下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

14
推荐指数
1
解决办法
2594
查看次数

有没有办法在Kestrel/ASP.NET Core中花费在请求队列中的时间?

我的理解是ASP.NET Core中间件是在准备好处理请求时运行的.但是如果应用程序处于负载状态并且ASP.NET Core无法处理所有请求,那么它们会被置于某个"队列"中?我不知道这是否是Kestrel内部的一些托管队列,或者它是否与libuv有关.

我希望能够知道给定请求在此队列中花费了多长时间.HttpContext上有什么东西可以告诉我这个吗?

提前致谢

c# kestrel-http-server asp.net-core

14
推荐指数
1
解决办法
1163
查看次数

在ASP.NET Core应用程序中启用Windows身份验证和匿名身份验证

我知道之前已经多次询问过这个问题,但遗憾的是,不是关于ASP.NET核心网络应用程序,而是经典的ASP.NET网络应用程序.我在互联网上找到的所有答案都没有帮助我,因为ASP.NET核心应用程序的IIS配置与传统的ASP.NET有很大不同.例如,ASP.NET Core使用Kestrel代理,因此ASP.NET中的许多配置都不在ASP.NET Core中.我基本上已经尝试过我可能在互联网上找到的所有内容,但没有人帮助过我.我想它就像在IIS中的应用程序上启用匿名和Windows身份验证一样简单,就是这样,但我想它会比这更有用.

在单个asp.net核心Web应用程序中启用这些身份验证的过程是什么?

c# authentication iis-8 kestrel-http-server asp.net-core

14
推荐指数
3
解决办法
1万
查看次数

从ASP.NET Core 2.1应用程序中删除"Server"标头

是否可以删除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

14
推荐指数
6
解决办法
6658
查看次数