标签: kestrel-http-server

无法加载应用程序或执行命令'Microsoft.AspNet.Server.Kestrel'

我正在尝试将我的ASP.NET 5 WebApi部署到远程服务器(Windows Server 2008 R2),并且无法使其与IIS一起正常运行.

project.json

{
  "webroot": "wwwroot",
  "version": "1.0.0-*",

  "dependencies": {
    "App.Data": "1.0.0-*",
    "App.Model": "1.0.0-*",
    "App.Repository": "1.0.0-*",
    "App.ViewModel": "1.0.0-*",
    "AutoMapper": "4.1.1",
    "Microsoft.AspNet.Authentication": "1.0.0-rc2-16009",
    "Microsoft.AspNet.Authentication.JwtBearer": "1.0.0-rc2-16009",
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc2-16136",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc2-15873",
    "Microsoft.AspNet.Mvc": "6.0.0-rc2-16377",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-16017",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-15932",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc2-15916",
    "Microsoft.Framework.Configuration.Json": "1.0.0-rc1-15666",
    "Microsoft.Framework.Logging": "1.0.0-rc1-15644",
    "Microsoft.Framework.Logging.Console": "1.0.0-rc1-15644",
    "Microsoft.IdentityModel.Protocols.OpenIdConnect": "2.0.0-rc1-211120828"
  },

  "commands": {
    "kestrel": "Microsoft.AspNet.Server.Kestrel",
    "web": "Microsoft.AspNet.Server.Kestrel"
  },

  "frameworks": {
    "dnx451": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}
Run Code Online (Sandbox Code Playgroud)

当我尝试从浏览器访问应用程序时,我得不到任何回复.当我web.cmd在服务器上执行时,我收到以下错误:

Error: Unable to load …
Run Code Online (Sandbox Code Playgroud)

iis asp.net-web-api kestrel-http-server asp.net-core

6
推荐指数
1
解决办法
3916
查看次数

交叉编译从Windows到Linux的dotnet核心应用程序

我在Windows工作,想在Windows上构建一个dotnet核心应用程序,以便在Linux上运行.在build文件夹中,我看到已发布文件夹中的.DLL文件引用,这显然不适用于Linux - 如何从我的Windows环境编译应用程序以在Linux上运行?可能吗?

在project.json文件中指定了运行时版本,我认为这与C:\ Program Files\dotnet\sdk\1.0.0-preview2-003121\runtimes位置中的运行时相关联?如果是这样,我如何在Windows中安装Linux运行时并引用它?

linux windows cross-compiling kestrel-http-server asp.net-core-1.0

6
推荐指数
1
解决办法
1373
查看次数

如何停止自托管的Kestrel应用程序?

我有一个规范代码,可以在任务中自行托管一个asp.net mvc应用程序:

            Task hostingtask = Task.Factory.StartNew(() =>
            {
                Console.WriteLine("hosting ffoqsi");
                IWebHost host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseIISIntegration()
                    .UseStartup<Startup>()
                    .UseApplicationInsights()
                    .Build();

                host.Run();
            }, canceltoken);
Run Code Online (Sandbox Code Playgroud)

当我取消此任务时,将抛出ObjectDisposedException.我怎样才能优雅地关闭主人?

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

6
推荐指数
2
解决办法
3664
查看次数

在查询参数中重写正斜杠

在我的asp.net核心应用程序(角4前端)我接受这样的URL:

example.com/report;url=http%3A%2F%2Fexample2.com
Run Code Online (Sandbox Code Playgroud)

我想创建一个允许人们输入以下网址的重写规则:

example.com/report;url=http://example2.com
Run Code Online (Sandbox Code Playgroud)

我无法找到如何做到这一点.

我试过了:

var options = new RewriteOptions()
    .AddRewrite(@"(.*);url=http:\/\/([^;]*)(.*)", "$1;url=http%3A%2F%2F$2$3", skipRemainingRules: false)
    .AddRewrite(@"^report.*", "index.html", skipRemainingRules: true)

app.UseRewriter(options);
Run Code Online (Sandbox Code Playgroud)

这不起作用,但即使这样做也不会解释在域之后有斜杠的URL,即子目录.使用组匹配模式我认为不可能这样做.它必须是匹配组上的查找和替换类型操作.

其他Web服务器将此作为解码斜杠的可配置选项.我在asp.net核心文档中找不到任何引用.这可能吗?

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

6
推荐指数
1
解决办法
929
查看次数

ASP.NET核心2.0独立:通过命令行传递监听URL

我按照本教程编写了我的第一个ASP.NET Core 2.0 Web REST API应用程序.但是我的具体问题是关于在VS2017中创建标准ASP.NET核心Web应用程序时在Program.cs文件中获得的代码,它与此处描述的代码相同:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace WebApplication5
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有我的应用程序工作正常,当我在VS2017调试,所以接下来我做的步骤是按使它成为一个独立的应用程序本教程,它工作正常,并给了我一个可执行文件,我可以运行(我是在Windows 10 64) .

现在的问题是这个可执行文件在端口5000上启动了web服务器,但是我希望能够通过命令行参数配置监听URL.

通过上面的代码来看,我们可以看到,args传递给WebHost.CreateDefaultBuilder(args),所以我假设的任何命令行参数通过此功能解释,但我想不出我有什么在命令行上传递,以获取服务器听另一个港口.

我尝试了以下选项:
- MyApp.exe --UseUrls="http://*:5001"
- MyApp.exe --UseUrls=http://*:5001
- MyApp.exe --server.urls=http://*:5001
-MyApp.exe urls="http://*:5001"

以及其他各种组合......应用程序启动但只能在端口5000上进行监听.

我开始认为我正在尝试一些不可能的事情:)所以它真的不可能或者我错过了什么吗?

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

6
推荐指数
1
解决办法
3279
查看次数

Kestrel 和 OpenSSL 密码套件

如何从 Linux docker 容器中更改可用于 OpenSSL/Kestrel 的可用密码套件?

首先,让我们从一些环境细节开始:

  • 我们使用一个 Linux docker 容器(Docker 版本 17.06.0-ce,构建 02c1d87),我们通过 powershell 连接到它
  • 它托管一个用 C# 编写的 ASP.Net Core (netcore 1.1) Web 应用程序。
  • 主要针对 .NetStandard 1.4/1.6 编写,但计划迁移到 2.0。
  • 我们在 docker 容器上使用 Kestrel 作为我们的 Web 服务器
  • 据我所知,Kestrel 在后台使用 openSSL (1.0.1)。

我的 Program.cs 看起来像这样,它设置了 kestrel:

builder.UseKestrel(o => o.UseHttps(new HttpsConnectionFilterOptions
            {
                SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11,
                CheckCertificateRevocation = true,
                ClientCertificateMode = ClientCertificateMode.AllowCertificate 
                ServerCertificate = new X509Certificate2(certificate.Pfx, certificate.Password)
            }))
    .UseUrls(bindTo);
Run Code Online (Sandbox Code Playgroud)

关键是这样的:

SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11,
Run Code Online (Sandbox Code Playgroud)

无论我在这里设置什么值(Tls12、Tls11、Tls 或这些值的任何子集),它似乎都不会对连接可用的密码套件产生影响。我正在查看我的 URL 的 sslLabs 报告,由于旧协议上的 …

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

6
推荐指数
1
解决办法
3163
查看次数

无法使用Angular 5客户端启动与信号器核心集线器的连接

我有一个运行SignalR核心集线器的.Net Core 2.0 C#Web Api.我甚至无法启动()我的hubConnection从angular(5.0.1)收到此错误:

选项https:// localhost:44301/hubs/sample 405(方法不允许)

错误:无法启动连接.错误:方法不允许

建立连接时出错:(

XHR加载失败:OPTIONS" https:// localhost:44301/hubs/sample ".

HttpError:XMLHttpRequest.xhr.onload不允许的方法[as __zone_symbol__ON_PROPERTYload](webpack-internal:///../../../../@aspnet/signalr-client/dist/src/HttpClient.js: 30:28)在ZoneDelegate.invokeTask(webpack-internal)的XMLHttpRequest.wrapFn(webpack-internal:///../../../../zone.js/dist/zone.js:1166:39) :///../../../../zone.js/dist/zone.js:425:31)在Object.onInvokeTask(webpack-internal:///../../ .. /core/esm5/core.js:4816:33)在ZoneDelegate.invokeTask(webpack-internal:///../../../../zone.js/dist/zone.js:424:36 )在Zone.runTask(webpack-internal:///../../../../zone.js/dist/zone.js:192:47)的ZoneTask.invokeTask [作为调用](webpack-)内部:///../../../../zone.js/dist/zone.js:499:34)在invokeTask(webpack-internal:///../../../) ../zone.js/dist/zone.js:1540:14)在XMLHttpRequest.globalZoneAwareCallback(webpack-internal:///../../../../zone.js/dist/zone.js :1566:17)

我正在努力甚至调试这个问题,即使在小提琴手的帮助下我也无法解决它.它似乎不是我的Api的问题,因为Kestrel控制台打印出来到集线器的请求进来,但不会打印任何错误.而且我可以毫无问题地获取,发送和发布到我的控制器.

这是我的StartUp.cs配置(我省略了与简洁无关的代码)

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(
            "CorsPolicy",
            builder =>
                builder
                .AllowAnyOrigin()
                .AllowAnyHeader()
                .AllowAnyMethod()
                .AllowCredentials()
        );
    });

    services.AddAuthentication();
    services.AddMvcCore()
        .AddAuthorization(options => {...});
    services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(options => {...});

    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors("CorsPolicy");
    app.UseAuthentication();

    app.UseSignalR(routes =>
    {
        routes.MapHub<SampleHub>("/hubs/sample");
    });

    app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)

这是我的示例中心

public interface ISampleHubClient 
{
    Task receiveMessage(SampleRequest …
Run Code Online (Sandbox Code Playgroud)

typescript kestrel-http-server asp.net-core-2.0 angular asp.net-core-signalr

6
推荐指数
2
解决办法
7254
查看次数

显然是随机错误:"防伪令牌验证失败.防伪cookie令牌和请求令牌不匹配."

背景

我有一个相对较新的ASP.NET Core 2站点.它只在一台服务器上运行(Windows Server 2012 R2,IIS 8.5),每上几天我上传更新时只会重启一次.大约每天一次,由于防伪系统的拒绝,用户的请求失败.这些是POST请求,并没有什么特别之处.我在POST请求中包含了防伪值,99%的时间,POST请求都有效.但是当它们没有时,stdout日志会说,"防伪令牌验证失败.防伪cookie令牌和请求令牌不匹配." 当我使用该确切语句执行Web搜索时,我得到零结果.所以我转向Stack Overflow.[这已不再适用,因为Web搜索现在会产生此Stack Overflow问题.]

错误

我已经在下面列出了stdout日志的相关部分.

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 POST [domain redacted] application/x-www-form-urlencoded 234
info: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter[1]
      Antiforgery token validation failed. The antiforgery cookie token and request token do not match.
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The antiforgery cookie token and request token do not match.
   at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.ValidateTokens(HttpContext httpContext, AntiforgeryTokenSet antiforgeryTokenSet)
   at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.<ValidateRequestAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.<OnAuthorizationAsync>d__3.MoveNext()
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[3]
      Authorization …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
1
解决办法
2517
查看次数

使用System.Net.Http.HttpClient时,服务器返回无效或无法识别的响应错误

最近我将我的代码库从.net core 1.0迁移到了2.0.之后,我收到错误"服务器在随机使用System.Net.Http.HttpClient时返回了无效或无法识别的响应错误".我在100个请求中的2个中收到此错误.

另外如何调试这个,因为它是随机发生的:(

Program.cs中

public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
            .AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(),"hosting.json"), optional: false)
            .Build();

            var useHttps = false;

            bool.TryParse(config !=null  ? config["useHttps"] : "false", out useHttps);

            IWebHost host = null;
            if (useHttps)
            {
                var fileInfo = new FileInfo(config["certName"]);
                X509Certificate2 cert = new X509Certificate2(fileInfo.FullName, config["certPwd"]);

                host = new WebHostBuilder()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseStartup<Startup>()
                    .UseKestrel(options =>
                    {
                        options.Listen(IPAddress.Loopback, 5000);
                        options.Listen(IPAddress.Any, 4430, listenOptions =>
                        {
                            listenOptions.UseHttps(cert);
                        });
                    })
                    .UseIISIntegration()
                    .Build();
            } …
Run Code Online (Sandbox Code Playgroud)

httpclient kestrel kestrel-http-server asp.net-core-2.0 .net-core-2.0

6
推荐指数
1
解决办法
1317
查看次数

我应该在哪个进程上附加Visual Studio Debugger来调试Kestrel应用程序?

我打开命令行并使用dotnet run命令运行我的应用程序。这将启动Kestrel并启动我的应用程序。

我应该如何确定将调试器附加到哪个进程,以便可以调试Kestrel现在托管的网站?

我特别需要能够以这种方式进行操作-意味着我不能使用标准F5。

visual-studio kestrel-http-server asp.net-core

6
推荐指数
1
解决办法
1189
查看次数