Skip to content

Commit 1672289

Browse files
committedJan 29, 2020
update to 1.7.8
1 parent 7f605db commit 1672289

17 files changed

+612
-69
lines changed
 

‎.vs/BeetleX.FastHttpApi/v15/.suo

-13 KB
Binary file not shown.

‎src/ActionContext.cs

+60-6
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,29 @@ internal ActionContext(ActionHandler handler, IHttpContext context, ActionHandle
1616
ActionHandlerFactory = actionHandlerFactory;
1717
Parameters = handler.GetParameters(context);
1818
Controller = handler.Controller;
19-
if (!handler.SingleInstance)
19+
if (handler.InstanceType != InstanceType.Single)
2020
{
21-
Controller = actionHandlerFactory.GetController(handler.ControllerType, context);
22-
if (Controller == null)
23-
Controller = handler.Controller;
21+
if (handler.InstanceType == InstanceType.Session)
22+
{
23+
var factory = SessionControllerFactory.GetFactory(context.Session);
24+
Controller = factory[handler.ControllerUID];
25+
if (Controller == null)
26+
{
27+
Controller = actionHandlerFactory.GetController(handler.ControllerType, context);
28+
if (Controller == null)
29+
Controller = Activator.CreateInstance(handler.ControllerType);
30+
factory[handler.ControllerUID] = Controller;
31+
}
32+
}
33+
else
34+
{
35+
Controller = actionHandlerFactory.GetController(handler.ControllerType, context);
36+
if (Controller == null)
37+
Controller = Activator.CreateInstance(handler.ControllerType);
38+
}
2439
}
40+
if (Controller == null)
41+
Controller = handler.Controller;
2542
}
2643

2744
private List<FilterAttribute> mFilters;
@@ -77,6 +94,10 @@ private void OnExecute(IActionResultHandler resultHandler)
7794
Handler.IncrementError();
7895
resultHandler.Error(e_);
7996
}
97+
finally
98+
{
99+
DisposedController();
100+
}
80101
}
81102

82103
private async Task OnAsyncExecute(IActionResultHandler resultHandler)
@@ -116,6 +137,31 @@ private async Task OnAsyncExecute(IActionResultHandler resultHandler)
116137
Handler.IncrementError();
117138
resultHandler.Error(e_);
118139
}
140+
finally
141+
{
142+
DisposedController();
143+
}
144+
}
145+
146+
private void DisposedController()
147+
{
148+
if (Handler.InstanceType == InstanceType.None)
149+
{
150+
try
151+
{
152+
if (Controller is IDisposable disposable)
153+
disposable?.Dispose();
154+
}
155+
catch (Exception e_)
156+
{
157+
if (HttpContext.Server.EnableLog(EventArgs.LogType.Error))
158+
{
159+
var request = HttpContext.Request;
160+
HttpContext.Server.Log(EventArgs.LogType.Error,
161+
$"HTTP {request.RemoteIPAddress} {request.Method} {request.BaseUrl} controller disposed error {e_.Message}@{e_.StackTrace}");
162+
}
163+
}
164+
}
119165
}
120166

121167
struct ActionTask : IEventWork
@@ -170,8 +216,16 @@ internal void Execute(IActionResultHandler resultHandler)
170216
{
171217
ActionTask actionTask = new ActionTask(this, resultHandler);
172218
var queue = Handler.ThreadQueue.GetQueue(this.HttpContext);
173-
this.HttpContext.Queue = queue;
174-
queue.Enqueue(actionTask);
219+
if (Handler.ThreadQueue.Enabled(queue))
220+
{
221+
this.HttpContext.Queue = queue;
222+
queue.Enqueue(actionTask);
223+
}
224+
else
225+
{
226+
Handler.IncrementError();
227+
resultHandler.Error(new Exception($"{Handler.SourceUrl} process error,out of queue limit!"), EventArgs.LogType.Warring, 500);
228+
}
175229
}
176230
}
177231
else

‎src/ActionHandler.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,22 @@ public ActionHandler(object controller, System.Reflection.MethodInfo method, Htt
3030
LoadParameter();
3131
Filters = new List<FilterAttribute>();
3232
Method = "GET";
33-
SingleInstance = true;
33+
InstanceType = InstanceType.Single;
3434
ControllerType = Controller.GetType();
3535
NoConvert = false;
3636
var aname = controller.GetType().Assembly.GetName();
3737
this.AssmblyName = aname.Name;
3838
this.Version = aname.Version.ToString();
39-
ThreadQueue = method.GetCustomAttribute<ThreadQueueAttribute>(false);
4039
Async = false;
41-
40+
ControllerUID = AssmblyName + "_" + ControllerType.Name;
4241
}
4342

4443
public ThreadQueueAttribute ThreadQueue { get; set; }
4544

4645
public HttpApiServer HttpApiServer { get; private set; }
4746

47+
public string ControllerUID { get; private set; }
48+
4849
public string Path { get; set; }
4950

5051
public string Url { get; set; }
@@ -63,7 +64,7 @@ public ActionHandler(object controller, System.Reflection.MethodInfo method, Htt
6364

6465
public Type ControllerType { get; set; }
6566

66-
public bool SingleInstance { get; set; }
67+
public InstanceType InstanceType { get; set; }
6768

6869
public RouteTemplateAttribute Route { get; set; }
6970

‎src/ActionHandlerFactory.cs

+24-8
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@ public void RegisterParameterBinder(Type type, Type binderType)
8181
{
8282
ParameterBinder parameterBinder = (ParameterBinder)Activator.CreateInstance(binderType);
8383
mParameterBinders[type] = binderType;
84-
Server.Log(EventArgs.LogType.Info, $"Register {type.Name}'s {binderType.Name} parameter binder success");
84+
if (Server.EnableLog(EventArgs.LogType.Info))
85+
Server.Log(EventArgs.LogType.Info, $"Register {type.Name}'s {binderType.Name} parameter binder success");
8586
}
8687
catch (Exception e_)
8788
{
88-
Server.Log(EventArgs.LogType.Error, $"Register {type.Name}'s {binderType.Name} parameter binder error {e_.Message} {e_.StackTrace}");
89+
if (Server.EnableLog(EventArgs.LogType.Error))
90+
Server.Log(EventArgs.LogType.Error, $"Register {type.Name}'s {binderType.Name} parameter binder error {e_.Message} {e_.StackTrace}");
8991
}
9092
}
9193

@@ -283,7 +285,8 @@ private void Register(HttpOptions config, Type controllerType, object controller
283285
{
284286
string path = System.IO.Path.GetDirectoryName(controllerType.Assembly.Location) + System.IO.Path.DirectorySeparatorChar;
285287
((IController)obj).Init(server, path);
286-
server.Log(EventArgs.LogType.Info, $"init {controllerType} controller path {path}");
288+
if (server.EnableLog(EventArgs.LogType.Info))
289+
server.Log(EventArgs.LogType.Info, $"init {controllerType} controller path {path}");
287290
}
288291
foreach (MethodInfo mi in controllerType.GetMethods(BindingFlags.Instance | BindingFlags.Public))
289292
{
@@ -377,8 +380,11 @@ private void Register(HttpOptions config, Type controllerType, object controller
377380
ActionHandler handler = GetAction(url);
378381
if (handler != null)
379382
{
380-
server.Log(EventArgs.LogType.Warring, "{0} already exists! replaced with {1}.{2}!", url, controllerType.Name,
381-
mi.Name);
383+
if (server.EnableLog(EventArgs.LogType.Error))
384+
{
385+
server.Log(EventArgs.LogType.Error, "{0} already exists! replaced with {1}.{2}!", url, controllerType.Name,
386+
mi.Name);
387+
}
382388
}
383389
handler = new ActionHandler(obj, mi, this.Server);
384390
if (mi.ReturnType == typeof(Task) || mi.ReturnType.BaseType == typeof(Task))
@@ -396,8 +402,12 @@ private void Register(HttpOptions config, Type controllerType, object controller
396402
handler.OptionsAttribute = methodOptionsAttribute;
397403
if (handler.OptionsAttribute == null && !ca.SkipPublicFilter)
398404
handler.OptionsAttribute = handler.HttpApiServer.Options.CrossDomain;
405+
handler.ThreadQueue = controllerType.GetCustomAttribute<ThreadQueueAttribute>(false);
406+
var queue = mi.GetCustomAttribute<ThreadQueueAttribute>(false);
407+
if (queue != null)
408+
handler.ThreadQueue = queue;
399409
handler.NoConvert = noconvert;
400-
handler.SingleInstance = ca.SingleInstance;
410+
handler.InstanceType = ca.InstanceType;
401411
handler.DataConverter = actionConvert;
402412
handler.Route = ra;
403413
handler.Method = method;
@@ -425,11 +435,17 @@ private void Register(HttpOptions config, Type controllerType, object controller
425435
{
426436
AddHandlers(url, handler);
427437
server.ActionSettings(handler);
428-
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} to [{handler.Method}:{url}]");
438+
if (server.EnableLog(EventArgs.LogType.Info))
439+
{
440+
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} to [{handler.Method}:{url}]");
441+
}
429442
}
430443
else
431444
{
432-
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} cancel ");
445+
if (server.EnableLog(EventArgs.LogType.Info))
446+
{
447+
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} cancel ");
448+
}
433449
}
434450
}
435451
}

‎src/BeetleX.FastHttpApi.csproj

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp2.1</TargetFramework>
5-
<Copyright>Copyright © ikende.com 2019 email:henryfan@msn.com</Copyright>
5+
<Copyright>Copyright © beetlex.io 2019-2020 email:henryfan@msn.com</Copyright>
66
<Authors>henryfan</Authors>
77
<Company>ikende.com</Company>
8-
<Description>high performance and lightweight web api and websocket server components for .NETCore,performance higher than asp.net core mvc api 200%.</Description>
9-
<Version>1.7.6</Version>
8+
<Description>high performance and lightweight web api and websocket server components for .NETCore</Description>
9+
<Version>1.7.8</Version>
1010
<PackageProjectUrl>https://github.com/IKende/FastHttpApi</PackageProjectUrl>
1111
<PackageLicenseUrl>https://github.com/IKende/FastHttpApi/blob/master/LICENSE</PackageLicenseUrl>
12-
<AssemblyVersion>1.7.6.0</AssemblyVersion>
13-
<FileVersion>1.7.6.0</FileVersion>
12+
<AssemblyVersion>1.7.8.0</AssemblyVersion>
13+
<FileVersion>1.7.8.0</FileVersion>
1414
<LangVersion>7.3</LangVersion>
1515
<Product>BeetleX.FastHttpApi</Product>
1616
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
17-
<PackageReleaseNotes>high performance and lightweight web api and websocket server components for .NETCore,performance higher than asp.net core mvc api 200%.</PackageReleaseNotes>
17+
<PackageReleaseNotes>high performance and lightweight web api and websocket server components for .NETCore</PackageReleaseNotes>
1818
<SignAssembly>false</SignAssembly>
1919
<AssemblyOriginatorKeyFile>Beetlex.FastHttpApi.pfx</AssemblyOriginatorKeyFile>
2020
<DelaySign>false</DelaySign>
@@ -43,7 +43,7 @@
4343
</ItemGroup>
4444

4545
<ItemGroup>
46-
<PackageReference Include="BeetleX" Version="1.4.7" />
46+
<PackageReference Include="BeetleX" Version="1.4.9.4" />
4747
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
4848
</ItemGroup>
4949

‎src/ContenType.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ public static string GetContentType(string ext)
582582
.sol,text/plain
583583
.spp,text/xml
584584
.stm,text/html
585-
.svg,text/xml
585+
.svg,image/svg+xml
586586
.tld,text/xml
587587
.txt,text/plain
588588
.uls,text/iuls

‎src/ControllerAttribute.cs

+10-2
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,24 @@ public class ControllerAttribute : Attribute
99
{
1010
public ControllerAttribute()
1111
{
12-
SingleInstance = true;
12+
InstanceType = InstanceType.Single;
1313
}
1414
public string BaseUrl { get; set; }
1515

16-
public bool SingleInstance { get; set; }
16+
public InstanceType InstanceType { get; set; }
1717

1818
public bool SkipPublicFilter { get; set; } = false;
1919
}
2020

2121

22+
public enum InstanceType
23+
{
24+
Single,
25+
Session,
26+
None
27+
}
28+
29+
2230
public interface IBodyFlag { }
2331

2432
public interface IController

0 commit comments

Comments
 (0)
Please sign in to comment.