【发布时间】:2020-12-25 17:15:30
【问题描述】:
我使用 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 接口而不是IWebHostBuilder 接口。
这个项目不应该是一个 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 并出现这些错误
-
没有给出与“ConnectionBuilderExtensions.Run(IConnectionBuilder, Func
)”所需的形式参数“中间件”相对应的参数 -
当前上下文中不存在名称“WebHost”
我认为这是因为工作项目不使用 Web SDK。
【问题讨论】:
-
据我所知 kestrel 是 webhostbuilder 的扩展。如果您需要在控制台应用程序中使用 Web 服务器,请在您的 program.cs 中使用 webhostbuilder
-
嗯,我试过了,但没用……我更新了我的问题