gpt4 book ai didi

c# - 在 .NET Core 辅助项目中使用 Kestrel

转载 作者:行者123 更新时间:2023-12-05 00:45:22 33 4
gpt4 key购买 nike

我使用 Visual Studio 提供的模板创建了一个新的 .NET Core 辅助项目。我想监听传入的 TCP 消息和 HTTP 请求。我关注 David Fowler's "Multi-protocol Server with ASP.NET Core and Kestrel" repository关于如何设置 Kestrel。

我所要做的就是安装 Microsoft.AspNetCore.Hosting 包以访问 UseKestrel 方法。

Program.cs 文件中我目前正在这样做

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}

很遗憾,我无法将 UseKestrel 附加到 ConfigureServices 方法。我认为这是因为我使用的是 IHostBuilder 接口(interface)而不是 IWebHostBuilder 接口(interface)。

此项目不应是 Web API 项目,而应保留为 Worker 项目。

任何想法如何为此配置 Kestrel?


我尝试将代码更改为示例存储库中的代码

using System.Net;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace Service
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
// ...
})
.UseKestrel(options =>
{
// ...
});
}
}

这样做时仍然无法解析 WebHost 并出现这些错误

  • There is no argument given that corresponds to the required formal parameter 'middleware' of 'ConnectionBuilderExtensions.Run(IConnectionBuilder, Func<ConnectionContext, Task>)'

  • The name 'WebHost' does not exist in the current context

我认为这是因为工作项目不使用 Web SDK。

最佳答案

您使用 IHostbuilder 启用 HTTP 工作负载,您需要在 Host.CreateDefaultBuilder 中添加 .ConfigureWebHostDefaults。由于 Kestrel 是 Web 服务器,因此您只能从虚拟主机配置它。

在你的 program.cs 文件中

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseKestrel(options =>
{
// TCP 8007
options.ListenLocalhost(8007, builder =>
{
builder.UseConnectionHandler<MyEchoConnectionHandler>();
});

// HTTP 5000
options.ListenLocalhost(5000);

// HTTPS 5001
options.ListenLocalhost(5001, builder =>
{
builder.UseHttps();
});
});
});

或者

public static IHostBuilder CreateHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
// TCP 8007
options.ListenLocalhost(8007, builder =>
{
builder.UseConnectionHandler<MyEchoConnectionHandler>();
});

// HTTP 5000
options.ListenLocalhost(5000);

// HTTPS 5001
options.ListenLocalhost(5001, builder =>
{
builder.UseHttps();
});
});

由于您使用 Web 服务器启用 HTTP 工作负载,因此您的项目必须是 web 类型。仅当项目为 web 类型时才会启用 WebHost。因此,您需要更改您的 SDK 以在您的 csproj 文件中使用 web。

<Project Sdk="Microsoft.NET.Sdk.Web">

引用:

关于c# - 在 .NET Core 辅助项目中使用 Kestrel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63774926/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com