XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.ServerInteractive

重构服务接口与校验机制,提升标准化与扩展性

本次提交对核心服务接口进行了标准化重构,新增 IXFEStandardServerCoreServiceBase 作为统一基类,简化了校验服务实现,移除异步校验接口,所有校验服务统一为同步/异步方法。校验服务注册方式改为工厂模式,避免状态污染,并支持通过配置灵活启用内置服务。同步更新客户端请求构建器,修正默认端口与测试密码,提升整体可维护性和扩展性。版本号提升至 2.2.0。

c7e941c
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

17 个文件 +225 -246
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +2 -2
@@ -18,7 +18,7 @@ internal class Program
18 18 }, response => response)
19 19 .Build(options =>
20 20 {
21 options.RequestAddress = "http://localhost:8080/management";
21 options.RequestAddress = "http://localhost:3300/management";
22 22 });
23 23
24 24 private static readonly TableRequester TableRequester = new();
@@ -30,7 +30,7 @@ internal class Program
30 30 Console.WriteLine($"请求完成:{e.StatusCode}\t{e.Message}");
31 31 }
32 32
33 [SMTest("Admin", "12345641")]
33 [SMTest("Admin", "123456")]
34 34 public static async Task Login(string account, string password)
35 35 {
36 36 var result = await XFEClientRequester.Request<UserLoginResult<UserFaceInfo>>("login", account, password);
Deleted XFEExtension.NetCore.ServerInteractive/Implements/CoreService/ServerCoreVerifyAsyncServiceBase.cs +0 -14
@@ -1,14 +0,0 @@
1 using XFEExtension.NetCore.CyberComm;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
3 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
4
5 namespace XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
6
7 /// <summary>
8 /// 服务器核心校验服务基类
9 /// </summary>
10 public abstract class ServerCoreVerifyAsyncServiceBase : XFEServerCoreServiceBase, IServerCoreVerifyAsyncService
11 {
12 /// <inheritdoc/>
13 public abstract Task<bool> VerifyRequestAsync(object? sender, CyberCommRequestEventArgs e, ServerCoreReturnArgs r);
14 }
Modified XFEExtension.NetCore.ServerInteractive/Implements/CoreService/ServerCoreVerifyServiceBase.cs +5 -4
@@ -1,6 +1,4 @@
1 using XFEExtension.NetCore.CyberComm;
2 using XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
3 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
1 using XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
4 2
5 3 namespace XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
6 4
@@ -10,5 +8,8 @@ namespace XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
10 8 public abstract class ServerCoreVerifyServiceBase : XFEServerCoreServiceBase, IServerCoreVerifyService
11 9 {
12 10 /// <inheritdoc/>
13 public abstract bool VerifyRequest(object? sender, CyberCommRequestEventArgs e, ServerCoreReturnArgs r);
11 public virtual bool VerifyRequest() => true;
12
13 /// <inheritdoc/>
14 public virtual Task<bool> VerifyRequestAsync() => Task.FromResult(true);
14 15 }
Modified XFEExtension.NetCore.ServerInteractive/Implements/CoreService/XFEServerCoreServiceBase.cs +1 -1
@@ -9,7 +9,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
9 9 /// <summary>
10 10 /// 服务器核心服务基类
11 11 /// </summary>
12 public abstract class XFEServerCoreServiceBase : IXFEServerCoreServiceBase
12 public abstract class XFEServerCoreServiceBase : IXFEStandardServerCoreServiceBase
13 13 {
14 14 /// <inheritdoc/>
15 15 public bool Handled { get => ReturnArgs.Handled; set => ReturnArgs.Handled = value; }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IServerCoreStandardService.cs +1 -1
@@ -3,7 +3,7 @@
3 3 /// <summary>
4 4 /// 服务器标准核心服务
5 5 /// </summary>
6 public interface IServerCoreStandardService : IXFEServerCoreServiceBase
6 public interface IServerCoreStandardService : IXFEStandardServerCoreServiceBase
7 7 {
8 8 /// <summary>
9 9 /// 服务器标准核心服务初始化事件(在请求初始化的时候执行)
Deleted XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IServerCoreVerifyAsyncService.cs +0 -19
@@ -1,19 +0,0 @@
1 using XFEExtension.NetCore.CyberComm;
2 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
5
6 /// <summary>
7 /// 服务器核心初始化服务
8 /// </summary>
9 public interface IServerCoreVerifyAsyncService : IXFEServerCoreServiceBase
10 {
11 /// <summary>
12 /// 校验请求
13 /// </summary>
14 /// <param name="sender"></param>
15 /// <param name="e"></param>
16 /// <param name="r"></param>
17 /// <returns></returns>
18 Task<bool> VerifyRequestAsync(object? sender, CyberCommRequestEventArgs e, ServerCoreReturnArgs r);
19 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IServerCoreVerifyService.cs +10 -10
@@ -1,19 +1,19 @@
1 using XFEExtension.NetCore.CyberComm;
2 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
1 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
5 2
6 3 /// <summary>
7 4 /// 服务器核心初始化服务
8 5 /// </summary>
9 public interface IServerCoreVerifyService : IXFEServerCoreServiceBase
6 public interface IServerCoreVerifyService : IXFEStandardServerCoreServiceBase
10 7 {
11 8 /// <summary>
12 9 /// 校验请求
13 10 /// </summary>
14 /// <param name="sender"></param>
15 /// <param name="e"></param>
16 /// <param name="r"></param>
17 /// <returns></returns>
18 bool VerifyRequest(object? sender, CyberCommRequestEventArgs e, ServerCoreReturnArgs r);
11 /// <returns>如果请求通过校验,返回true;否则返回false。</returns>
12 bool VerifyRequest();
13
14 /// <summary>
15 /// 校验请求
16 /// </summary>
17 /// <returns>如果请求通过校验,返回true;否则返回false。</returns>
18 Task<bool> VerifyRequestAsync();
19 19 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IXFEServerCoreServiceBase.cs +3 -113
@@ -1,124 +1,14 @@
1 using System.Net;
2 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
3 using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
4 using XFEExtension.NetCore.XFETransform.JsonConverter;
1 using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
5 2
6 3 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
7 4
8 5 /// <summary>
9 /// XFE服务器核心服务
6 /// XFE服务器核心服务基类接口
10 7 /// </summary>
11 8 public interface IXFEServerCoreServiceBase
12 9 {
13 /// <summary>
14 /// 当前请求的执行语句
15 /// </summary>
16 string Execute { get; set; }
17
18 /// <summary>
19 /// 客户端IP地址
20 /// </summary>
21 string ClientIP { get; set; }
22
23 /// <summary>
24 /// 是否是标准错误(如果是标准错误,服务器将自动处理并返回给客户端;如果不是,服务器将输出报错及堆栈信息)
25 /// </summary>
26 bool IsStandardError { get; set; }
27
28 /// <summary>
29 /// 错误抛出是否已经处理完成(如果为true,表示错误已经被处理,不需要ErrorProcessor再次处理)
30 /// </summary>
31 bool Handled { get; set; }
32
33 10 /// <summary>
34 11 /// 服务器核心
35 12 /// </summary>
36 13 XFEServerCore XFEServerCore { get; set; }
37
38 /// <summary>
39 /// 当前请求的 json 节点
40 /// </summary>
41 QueryableJsonNode? Json { get; set; }
42
43 /// <summary>
44 /// 当前请求的返回参数
45 /// </summary>
46 ServerCoreReturnArgs ReturnArgs { get; set; }
47
48 /// <summary>
49 /// 当前请求的 HttpListenerRequest 对象
50 /// </summary>
51 HttpListenerRequest Request { get; set; }
52
53 /// <summary>
54 /// Sends a reply message asynchronously using the current context.
55 /// </summary>
56 /// <param name="message">The message text to send as a reply. Cannot be null or empty.</param>
57 /// <returns>A task that represents the asynchronous send operation.</returns>
58 Task Send(string message);
59
60 /// <summary>
61 /// Sends a binary message using the specified buffer asynchronously.
62 /// </summary>
63 /// <param name="buffer">The byte array containing the data to be sent as the binary message. Cannot be null.</param>
64 /// <returns>A task that represents the asynchronous send operation.</returns>
65 Task Send(byte[] buffer);
66
67 /// <summary>
68 /// Sends the contents of the specified stream as a binary message asynchronously.
69 /// </summary>
70 /// <param name="stream">The stream containing the data to send. The stream must be readable and positioned at the beginning of the data
71 /// to be sent.</param>
72 /// <returns>A task that represents the asynchronous send operation.</returns>
73 Task Send(Stream stream);
74
75 /// <summary>
76 /// Sends an object as JSON asynchronously.
77 /// </summary>
78 /// <param name="data">The object to serialize to JSON and send.</param>
79 Task Send(object data);
80
81 /// <summary>
82 /// 关闭并返回 OK
83 /// </summary>
84 void OK();
85
86 /// <summary>
87 /// 返回信息并关闭
88 /// </summary>
89 /// <param name="message">要返回的信息</param>
90 Task Close(string message);
91
92 /// <summary>
93 /// 结束与客户端的通讯
94 /// </summary>
95 /// <param name="buffer"></param>
96 Task Close(byte[] buffer);
97
98 /// <summary>
99 /// 结束与客户端的通讯
100 /// </summary>
101 /// <param name="stream"></param>
102 Task Close(Stream stream);
103
104 /// <summary>
105 /// 返回错误信息并关闭
106 /// </summary>
107 /// <param name="message">要返回的错误信息</param>
108 /// <param name="code">HTTP 状态码</param>
109 Task CloseWithError(string message, HttpStatusCode code = HttpStatusCode.BadRequest);
110
111 /// <summary>
112 /// 以异常结束与客户端的通讯
113 /// </summary>
114 /// <param name="message"></param>
115 /// <param name="code"></param>
116 /// <param name="handled"></param>
117 ServerCoreReturnArgs Error(string message, HttpStatusCode code = HttpStatusCode.BadRequest, bool handled = false);
118
119 /// <summary>
120 /// Sends the specified object serialized as JSON and closes the connection.
121 /// </summary>
122 /// <param name="data">The object to serialize to JSON and send.</param>
123 Task Close(object data);
124 }
14 }
Added XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IXFEStandardServerCoreServiceBase.cs +119 -0
@@ -0,0 +1,119 @@
1 using System.Net;
2 using XFEExtension.NetCore.CyberComm;
3 using XFEExtension.NetCore.ServerInteractive.Models.ServerModels;
4 using XFEExtension.NetCore.XFETransform.JsonConverter;
5
6 namespace XFEExtension.NetCore.ServerInteractive.Interfaces.CoreService;
7
8 /// <summary>
9 /// XFE服务器核心标准服务基类接口
10 /// </summary>
11 public interface IXFEStandardServerCoreServiceBase : IXFEServerCoreServiceBase
12 {
13 /// <summary>
14 /// 当前请求的执行语句
15 /// </summary>
16 string Execute { get; set; }
17
18 /// <summary>
19 /// 客户端IP地址
20 /// </summary>
21 string ClientIP { get; set; }
22
23 /// <summary>
24 /// 是否是标准错误(如果是标准错误,服务器将自动处理并返回给客户端;如果不是,服务器将输出报错及堆栈信息)
25 /// </summary>
26 bool IsStandardError { get; set; }
27
28 /// <summary>
29 /// 错误抛出是否已经处理完成(如果为true,表示错误已经被处理,不需要ErrorProcessor再次处理)
30 /// </summary>
31 bool Handled { get; set; }
32
33 /// <summary>
34 /// 当前请求的 json 节点
35 /// </summary>
36 QueryableJsonNode? Json { get; set; }
37
38 /// <summary>
39 /// 当前请求的返回参数
40 /// </summary>
41 ServerCoreReturnArgs ReturnArgs { get; set; }
42
43 /// <summary>
44 /// 当前请求的 HttpListenerRequest 对象
45 /// </summary>
46 HttpListenerRequest Request { get; set; }
47
48 /// <summary>
49 /// Sends a reply message asynchronously using the current context.
50 /// </summary>
51 /// <param name="message">The message text to send as a reply. Cannot be null or empty.</param>
52 /// <returns>A task that represents the asynchronous send operation.</returns>
53 Task Send(string message);
54
55 /// <summary>
56 /// Sends a binary message using the specified buffer asynchronously.
57 /// </summary>
58 /// <param name="buffer">The byte array containing the data to be sent as the binary message. Cannot be null.</param>
59 /// <returns>A task that represents the asynchronous send operation.</returns>
60 Task Send(byte[] buffer);
61
62 /// <summary>
63 /// Sends the contents of the specified stream as a binary message asynchronously.
64 /// </summary>
65 /// <param name="stream">The stream containing the data to send. The stream must be readable and positioned at the beginning of the data
66 /// to be sent.</param>
67 /// <returns>A task that represents the asynchronous send operation.</returns>
68 Task Send(Stream stream);
69
70 /// <summary>
71 /// Sends an object as JSON asynchronously.
72 /// </summary>
73 /// <param name="data">The object to serialize to JSON and send.</param>
74 Task Send(object data);
75
76 /// <summary>
77 /// 关闭并返回 OK
78 /// </summary>
79 void OK();
80
81 /// <summary>
82 /// 返回信息并关闭
83 /// </summary>
84 /// <param name="message">要返回的信息</param>
85 Task Close(string message);
86
87 /// <summary>
88 /// 结束与客户端的通讯
89 /// </summary>
90 /// <param name="buffer"></param>
91 Task Close(byte[] buffer);
92
93 /// <summary>
94 /// 结束与客户端的通讯
95 /// </summary>
96 /// <param name="stream"></param>
97 Task Close(Stream stream);
98
99 /// <summary>
100 /// 返回错误信息并关闭
101 /// </summary>
102 /// <param name="message">要返回的错误信息</param>
103 /// <param name="code">HTTP 状态码</param>
104 Task CloseWithError(string message, HttpStatusCode code = HttpStatusCode.BadRequest);
105
106 /// <summary>
107 /// 以异常结束与客户端的通讯
108 /// </summary>
109 /// <param name="message"></param>
110 /// <param name="code"></param>
111 /// <param name="handled"></param>
112 ServerCoreReturnArgs Error(string message, HttpStatusCode code = HttpStatusCode.BadRequest, bool handled = false);
113
114 /// <summary>
115 /// Sends the specified object serialized as JSON and closes the connection.
116 /// </summary>
117 /// <param name="data">The object to serialize to JSON and send.</param>
118 Task Close(object data);
119 }
Modified XFEExtension.NetCore.ServerInteractive/Options/XFEStandardServerCoreOptions.cs +16 -0
@@ -8,6 +8,22 @@ namespace XFEExtension.NetCore.ServerInteractive.Options;
8 8 /// </summary>
9 9 public class XFEStandardServerCoreOptions<T> where T : class
10 10 {
11 /// <summary>
12 /// 使用服务器入口点校验服务(默认为true,启用服务器入口点校验服务,服务器入口点校验服务用于校验请求是否来自合法的入口点)
13 /// </summary>
14 public bool UseEntryPointVerifyService { get; set; } = true;
15 /// <summary>
16 /// 使用日期统计服务(默认为true,启用日期统计服务,日期统计服务用于统计每天的请求数量等信息,可以用于监控服务器的使用情况)
17 /// </summary>
18 public bool UseDailyCounterService { get; set; } = true;
19 /// <summary>
20 /// 使用XFE异常处理服务(默认为true,启用XFE异常处理服务,XFE异常处理服务用于处理服务器核心服务中的异常,并将异常信息返回给客户端)
21 /// </summary>
22 public bool UseXFEErrorProcessService { get; set; } = true;
23 /// <summary>
24 /// 使用连接检查服务(默认为true,启用连接检查服务,连接检查服务用于检查服务器与客户端之间的连接是否正常,可以用于监控服务器的连接状态)
25 /// </summary>
26 public bool UseConnectService { get; set; } = true;
11 27 /// <summary>
12 28 /// 获取用户函数
13 29 /// </summary>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEClientRequesterBuilderExtensions.cs +1 -1
@@ -75,7 +75,7 @@ public static class XFEClientRequesterBuilderExtensions
75 75 /// </summary>
76 76 /// <typeparam name="T">登录返回用户接口类型</typeparam>
77 77 /// <returns></returns>
78 public XFEClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddXFERequest<LoginRequestService<T>>("login").AddXFERequest<ReloginRequestService<T>>("relogin");
78 public XFEClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddStandardRequest<LoginRequestService<T>>("login").AddStandardRequest<ReloginRequestService<T>>("relogin");
79 79
80 80 /// <summary>
81 81 /// 使用XFE标准服务器服务请求
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEServerCoreBuilderExtensions.cs +17 -6
@@ -78,7 +78,7 @@ public static class XFEServerCoreBuilderExtensions
78 78 /// 添加服务器入口点校验
79 79 /// </summary>
80 80 /// <returns></returns>
81 public XFEServerCoreBuilder AddEntryPointVerify() => xFEServerCoreBuilder.AddVerifyService<EntryPointVerifyServer>();
81 public XFEServerCoreBuilder AddEntryPointVerify() => xFEServerCoreBuilder.AddVerifyService<EntryPointVerifyService>();
82 82
83 83 /// <summary>
84 84 /// 添加服务器日志请求
@@ -133,11 +133,22 @@ public static class XFEServerCoreBuilderExtensions
133 133 }
134 134
135 135 // Common services that don't strictly require user functions
136 builder = builder.AddEntryPointVerify()
137 .AddDailyCounterService()
138 .AddXFEErrorProcessService()
139 .AddConnectService();
140
136 if (options.UseEntryPointVerifyService)
137 {
138 builder = builder.AddEntryPointVerify();
139 }
140 if (options.UseDailyCounterService)
141 {
142 builder = builder.AddDailyCounterService();
143 }
144 if (options.UseXFEErrorProcessService)
145 {
146 builder = builder.AddXFEErrorProcessService();
147 }
148 if (options.UseConnectService)
149 {
150 builder = builder.AddConnectService();
151 }
141 152 // Add services that depend on user functions if available
142 153 if (hasUserFunctions)
143 154 {
Deleted XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/EntryPointVerifyServer.cs +0 -31
Added XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/EntryPointVerifyService.cs +29 -0
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs +7 -9
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs +8 -32
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +6 -3