在WPF中集成SuperSocket 2.0

本文在.Net5环境下,在WPF项目中集成SuperSocket(V2.0.0-beta.10),以便使WPF程序拥有Socket服务器能力。

本文假设读者具有在.Net5控制台程序中使用SuperSocket 2.0的能力,因此服务器相关设置不再介绍。

1、创建托管服务器主机

参考在.Net5控制台程序中使用SuperSocket 2.0,将其创建主机的代码复制过来即可。

复制代码
public interface ISocketServerService
{
    void Startup();
    void Shutdown();
}

public class SocketServerService : ISocketServerService
{
    private readonly IHost _host;
    private readonly ILogService _logService;

    public SocketServerService(ILogService logService)
    {
        _logService = logService;

        //创建宿主:用Package类型和PipelineFilter类型创建SuperSocket宿主。
        _host = SuperSocketHostBuilder.Create<MyPackageInfo, MyPipelineFilter>()
            //注入Service
            .UseHostedService<MyService<MyPackageInfo>>()
            //注入Session
            .UseSession<MySession>()
            //注入命令
            .UseCommand((commandOptions) =>
            {
                commandOptions.AddCommand<MyCommand>(); //数据命令
            })
            //启用Session容器
            .UseInProcSessionContainer()
            //配置日志
            .ConfigureLogging((hostCtx, loggingBuilder) => { loggingBuilder.SetMinimumLevel(LogLevel.Warning); })
            .Build();
    }

    public void Startup()
    {
        try
        {
            _host.StartAsync().GetAwaiter();
        }
        catch (Exception e)
        {
            _logService.Error($"启动SocketServer失败:{e.Message}.");
        }
    }

    public void Shutdown()
    {
        try
        {
            _host.StopAsync().GetAwaiter().GetResult();
        }
        catch (Exception e)
        {
            _logService.Error($"关闭SocketServer失败:{e.Message}.");
        }
        finally
        {
            _host.Dispose();
        }
    }
}
复制代码

2、添加配置文件appsettings.json

注意将其属性设置为:“生成操作”-“无”,“复制到输出目录”-“如果较新则复制”/”始终复制”。

下面的配置仅添加了IP和端口的参数作为示例。

复制代码
{
  "serverOptions": {
    "name": "MyServer",
    "listeners": [
      {
        "ip": "Any",
        "port": "2021"
      }
    ]
  }
}
复制代码

3、使用方法

ISocketServerService socketServerService = new SocketServerService(logService);
//启动Socket服务器
socketServerService.Startup();
//关闭Socket服务器
socketServerService.Shutdown();

4、注意事项

关闭Socket服务器时,如果不对IHost对象调用Dispose方法,SuperSocket不会真正关闭,导致WPF进程无法正常退出。

posted @   xhubobo  阅读(1090)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示