SuperSocket icon indicating copy to clipboard operation
SuperSocket copied to clipboard

webapi WebApplication 中如何使用多服务 MultipleServerHostBuilder

Open loveksmy opened this issue 1 year ago • 10 comments

` var builder = WebApplication.CreateBuilder(args);

        // Add services to the container.

        builder.Host.AsMultipleServerHostBuilder()
        .AddServer<StringPackageInfo, CommandLinePipelineFilter>(builder =>
        {
            builder...;
        });

`

这样写不能正确启动。

loveksmy avatar Jul 26 '23 06:07 loveksmy

Try this:

builder.Host.AsMultipleServerHostBuilder()
.AddServer<StringPackageInfo, CommandLinePipelineFilter>(builder =>
        {
            builder...;
        })
.AsMinimalApiHostBuilder()
.ConfigureHostBuilder();

kerryjiang avatar Jul 29 '23 19:07 kerryjiang

不行哦。 “MultipleServerHostBuilder”不包含“AsMinimalApiHostBuilder”的定义,并且最佳扩展方法重载“HostBuilderExtensions.AsMinimalApiHostBuilder(ISuperSocketHostBuilder)”需要类型为“SuperSocket.ISuperSocketHostBuilder”的接收器

loveksmy avatar Jul 31 '23 00:07 loveksmy

I am trying to support it https://github.com/kerryjiang/SuperSocket/commit/b7d89c4e52b6fb59d8f9c19a14b770f6c626a4e8

kerryjiang avatar Aug 03 '23 06:08 kerryjiang

It supposes to work like this:

builder.Host.AsMultipleServerHostBuilder()
.AddServer<StringPackageInfo, CommandLinePipelineFilter>(builder =>
        {
            builder...;
        })
.AsMinimalApiHostBuilder()
.ConfigureHostBuilder();

var app = builder.Build();
app.AdaptMultipleServerHost();

await app.RunAsync();

kerryjiang avatar Aug 03 '23 06:08 kerryjiang

nuget thank you

loveksmy avatar Aug 04 '23 03:08 loveksmy

不行哦。还是这个错误 “MultipleServerHostBuilder”不包含“AsMinimalApiHostBuilder”的定义,并且最佳扩展方法重载“HostBuilderExtensions.AsMinimalApiHostBuilder(ISuperSocketHostBuilder)”需要类型为“SuperSocket.ISuperSocketHostBuilder”的接收器

loveksmy avatar Aug 05 '23 01:08 loveksmy

Get latest packages from MyGet.

kerryjiang avatar Aug 05 '23 01:08 kerryjiang

` var builder = WebApplication.CreateBuilder(args);

        builder.Host.AsMultipleServerHostBuilder()
            .AddServer<StringPackageInfo, CommandLinePipelineFilter>(tcpServer =>
            {
                tcpServer.ConfigureSuperSocket(op =>
                {
                    op.Listeners = new List<ListenOptions>() { new ListenOptions() {
                     Ip="Any", Port=5555
                    }};
                });
            })
            .AsMinimalApiHostBuilder()
            .ConfigureHostBuilder();


        // Add services to the container.

        builder.Services.AddControllers();

        var app = builder.Build();

        app.AdaptMultipleServerHost();
        // Configure the HTTP request pipeline.

        app.UseAuthorization();


        app.MapControllers();

        app.Run();

`

我用了最新源码,还是报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1929 “MultipleServerHostBuilder”不包含“AsMinimalApiHostBuilder”的定义,并且最佳扩展方法重载“HostBuilderExtensions.AsMinimalApiHostBuilder(ISuperSocketHostBuilder)”需要类型为“SuperSocket.ISuperSocketHostBuilder”的接收器 WebApplication1 (net7.0)

loveksmy avatar Aug 05 '23 03:08 loveksmy

Added a missing method, please try again with latest source code or latest package from myget.

kerryjiang avatar Aug 06 '23 19:08 kerryjiang

非常感谢,已经成功。

builder.Host.AsMultipleServerHostBuilder() .AddServer<MyServiceA, StringPackageInfo, CommandLinePipelineFilter> .AddServer<MyServiceB, StringPackageInfo, CommandLinePipelineFilter>

这样可以成功添加并启动2个服务。

但是不带MyServiceA和MyServiceB后,只能启动第一个服务。

builder.Host.AsMultipleServerHostBuilder() .AddServer< StringPackageInfo, CommandLinePipelineFilter> .AddServer< StringPackageInfo, CommandLinePipelineFilter>

不知道用这种动态服务的场景多吗?有没其他处理办法。

谢谢

loveksmy avatar Aug 08 '23 02:08 loveksmy

应该是同一个服务类型,多个实例?应该是支持的啊,你最好有测试用例验证这个问题。

kerryjiang avatar Aug 31 '24 00:08 kerryjiang

Close this because the problem referred by the issue subject has been fixed.

kerryjiang avatar Aug 31 '24 00:08 kerryjiang