安装

nuget 安装RRQMSocket.RPC.AspNetCore

定义服务

服务器端中新建一个类,继承于ServerProvider类(或实现IServerProvider),然后在该类中写公共方法,并用TouchRpc属性标签标记,如果方法有重载,需要重新指定函数键

  • 支持outref关键字。
  • 支持代理生成注释
  • 支持注入。

    1. public class TestServerProvider: ServerProvider
    2. {
    3. private readonly ILogger<TestServerProvider> m_logger;
    4. /// <summary>
    5. /// 支持注入
    6. /// </summary>
    7. /// <param name="service"></param>
    8. /// <param name="logger"></param>
    9. public TestServerProvider(IWSTouchRpcService service,ILogger<TestServerProvider> logger)
    10. {
    11. this.m_logger = logger;
    12. }
    13. [Description("登录")]
    14. [TouchRpc]
    15. public bool Login(string account, string password)
    16. {
    17. if (account == "123" && password == "abc")
    18. {
    19. m_logger.LogInformation("True");
    20. return true;
    21. }
    22. m_logger.LogInformation("False");
    23. return false;
    24. }
    25. }

    注入服务

在ConfigureServices时,添加AddWSTouchRpc,并且配置相关项。

  1. public static RpcStore RpcStore { get; set; } = new RpcStore();
  2. // This method gets called by the runtime. Use this method to add services to the container.
  3. public void ConfigureServices(IServiceCollection services)
  4. {
  5. //声明一个适应于Asp,兼容IServiceCollection服务的容器
  6. IContainer container = new AspNetCoreContainer(services);
  7. //向Asp服务中添加IWSTouchRpcService
  8. var touchRpcService = services.AddWSTouchRpc(new RRQMSocket.RRQMConfig()
  9. .SetContainer(container));//设置IOC容器
  10. RpcStore.Container = container;//和RpcStore共享容器
  11. RpcStore.AddRpcParser(nameof(touchRpcService), touchRpcService);//添加解析器
  12. RpcStore.RegisterAllServer();//注册所有服务。
  13. services.AddControllers();
  14. // Swagger
  15. services.AddSwaggerGen(c =>
  16. {
  17. c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Demo", Version = "v1" });
  18. });
  19. }

启用中间件

首先必须启用WebSocket。其次使用UseWSTouchRpc即可。

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. // Swagger
  8. app.UseSwagger();
  9. app.UseSwaggerUI(c =>
  10. {
  11. c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Demo v1");
  12. });
  13. app.UseWebSockets();//必须先使用WebSocket
  14. app.UseWSTouchRpc("/wstouchrpc");//该操作不会影响原有的WebSocket,只要url不同即可。
  15. app.UseRouting();
  16. app.UseAuthorization();
  17. app.UseEndpoints(endpoints =>
  18. {
  19. endpoints.MapControllers();
  20. });
  21. }