新增了.net core版本内网代码,
This commit is contained in:
44
93_nei_core/Ewide.sln
Normal file
44
93_nei_core/Ewide.sln
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.1.32421.90
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Getf_Service_Transfer_core_client", "Getf_Service_Transfer_core_client\Getf_Service_Transfer_core_client.csproj", "{F037E01A-741E-490C-91F0-76D97137DFA6}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinService", "WinService", "{C7306EA1-E2E7-4560-AC1C-49A1A09AF736}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Getf_Service_Transfer_Client_coreService", "Getf_Service_Transfer_Client_coreService\Getf_Service_Transfer_Client_coreService.csproj", "{4182DC0E-24BB-44B6-AFF6-DFD345DF5144}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Getf_Service_Transfer_Client_Service_HttpHandler", "Getf_Service_Transfer_Client_Service_HttpHandler\Getf_Service_Transfer_Client_Service_HttpHandler.csproj", "{699DDA0D-FFB6-4D4D-BA25-D6E9DA62C689}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F037E01A-741E-490C-91F0-76D97137DFA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F037E01A-741E-490C-91F0-76D97137DFA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F037E01A-741E-490C-91F0-76D97137DFA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F037E01A-741E-490C-91F0-76D97137DFA6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4182DC0E-24BB-44B6-AFF6-DFD345DF5144}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4182DC0E-24BB-44B6-AFF6-DFD345DF5144}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4182DC0E-24BB-44B6-AFF6-DFD345DF5144}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4182DC0E-24BB-44B6-AFF6-DFD345DF5144}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{699DDA0D-FFB6-4D4D-BA25-D6E9DA62C689}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{699DDA0D-FFB6-4D4D-BA25-D6E9DA62C689}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{699DDA0D-FFB6-4D4D-BA25-D6E9DA62C689}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{699DDA0D-FFB6-4D4D-BA25-D6E9DA62C689}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{F037E01A-741E-490C-91F0-76D97137DFA6} = {C7306EA1-E2E7-4560-AC1C-49A1A09AF736}
|
||||
{4182DC0E-24BB-44B6-AFF6-DFD345DF5144} = {C7306EA1-E2E7-4560-AC1C-49A1A09AF736}
|
||||
{699DDA0D-FFB6-4D4D-BA25-D6E9DA62C689} = {C7306EA1-E2E7-4560-AC1C-49A1A09AF736}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {B2073C2C-0FD3-452B-8047-8134D68E12CE}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Getf_Service_Transfer_Client_coreService\Getf_Service_Transfer_Client_coreService.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,200 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Getf_Service_Transfer_Client_coreService;
|
||||
using Getf_Service_Transfer_Client_coreService.Entities;
|
||||
using Getf_Service_Transfer_Client_coreService.Helpers;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
namespace Getf_Service_Transfer_Client_Service_HttpHandler.HttpByte
|
||||
{
|
||||
public class HttpByteHandler : IDataHandler
|
||||
{
|
||||
LogHelper _LogHelper;
|
||||
|
||||
public TransInfo HandlerData(TransInfo srcData)
|
||||
{
|
||||
var r = new TransInfo();
|
||||
var action = srcData.Body.Action;
|
||||
if (String.IsNullOrWhiteSpace(action))
|
||||
{
|
||||
r.TransResultInfo = GetResult(-320, "Action(url|method)参数不能为空");
|
||||
return r;
|
||||
}
|
||||
var url = action;
|
||||
|
||||
var jsonStr = String.IsNullOrWhiteSpace(srcData.Body.Param) ? "{}" : srcData.Body.Param;
|
||||
var jObject = JsonConvert.DeserializeObject<JObject>(jsonStr);
|
||||
|
||||
var rData = DoRequest(url, jObject, srcData.Data, out string msg, out int htttpStatusCode);
|
||||
if (rData == null)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = htttpStatusCode,
|
||||
Message = msg
|
||||
};
|
||||
return r;
|
||||
}
|
||||
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = htttpStatusCode,
|
||||
Message = msg
|
||||
};
|
||||
r.Data = rData;
|
||||
return r;
|
||||
}
|
||||
|
||||
private TransResult GetResult(int code, string message)
|
||||
{
|
||||
return new TransResult()
|
||||
{
|
||||
Code = code,
|
||||
Message = message
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
public byte[] DoRequest(string url, JObject jObject, byte[] data, out string msg, out int httpStatusCode)
|
||||
{
|
||||
try
|
||||
{
|
||||
Encoding encoding = new UTF8Encoding(false);
|
||||
if (jObject["Encoding"] != null)
|
||||
{
|
||||
encoding = Encoding.GetEncoding(jObject["Encoding"].Value<string>());
|
||||
}
|
||||
var method = "POST";
|
||||
if (jObject["Method"] != null)
|
||||
{
|
||||
method = jObject["Method"].Value<string>();
|
||||
}
|
||||
|
||||
|
||||
HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest;
|
||||
var bodyIndex = GetBodyIndex(data);
|
||||
var headStr = encoding.GetString(data.Take(bodyIndex).ToArray());
|
||||
|
||||
var bodyData = data.Skip(bodyIndex)/*.Select(m => (char)m)*/.ToArray();
|
||||
|
||||
SetHead(httpWebRequest, method, headStr);
|
||||
|
||||
byte[] r;
|
||||
if (!"GET".Equals(method, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var requestStream = httpWebRequest.GetRequestStream();
|
||||
requestStream.Write(bodyData, 0, bodyData.Length);
|
||||
r = GetResponse(httpWebRequest, encoding);
|
||||
requestStream.Close();
|
||||
requestStream.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
r = GetResponse(httpWebRequest, encoding);
|
||||
}
|
||||
msg = String.Empty;
|
||||
httpStatusCode = 200;
|
||||
return r;
|
||||
}
|
||||
catch (WebException e)
|
||||
{
|
||||
using (var stream = e?.Response?.GetResponseStream())
|
||||
{
|
||||
httpStatusCode = (int?)((System.Net.HttpWebResponse)(e?.Response))?.StatusCode ?? 500;
|
||||
if (stream != null)
|
||||
{
|
||||
using (StreamReader streamReader = new StreamReader(stream))
|
||||
{
|
||||
msg = streamReader.ReadToEnd();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = e.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
httpStatusCode = 500;
|
||||
msg = e.Message;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private int GetBodyIndex(byte[] data)
|
||||
{
|
||||
var index = -1;
|
||||
for (int i = 0, c = data.Length; i < c; i++)
|
||||
{
|
||||
var elem = data[i];
|
||||
if (elem == '\r' && i + 3 < data.Length && data[i + 1] == '\n' && data[i + 2] == '\r' && data[i + 3] == '\n')
|
||||
{
|
||||
index = i + 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
private static PropertyInfo InnerCollectionProperty = typeof(WebHeaderCollection).GetProperty("InnerCollection",
|
||||
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
|
||||
|
||||
public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
|
||||
{
|
||||
var collection = InnerCollectionProperty.GetValue(header, null) as NameValueCollection;
|
||||
collection[name] = value;
|
||||
}
|
||||
|
||||
private void SetHead(HttpWebRequest httpWebRequest, string method, string headStr)
|
||||
{
|
||||
httpWebRequest.Method = method;
|
||||
var headStrSplitResult = headStr.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (var elem in headStrSplitResult)
|
||||
{
|
||||
var keyValue = elem.Split(':');
|
||||
var name = keyValue[0];
|
||||
var value = keyValue[1];
|
||||
if ("Accept-Encoding".Equals(name, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip;
|
||||
}
|
||||
SetHeaderValue(httpWebRequest.Headers, name, value);
|
||||
}
|
||||
/*if ("post".Equals(method, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(httpWebRequest.ContentType))
|
||||
{
|
||||
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private byte[] GetResponse(HttpWebRequest httpWebRequest, Encoding encoding)
|
||||
{
|
||||
var response = httpWebRequest.GetResponse();
|
||||
response.Headers.ToByteArray();
|
||||
|
||||
using (var stream = response.GetResponseStream())
|
||||
{
|
||||
using (MemoryStream ms = new MemoryStream())
|
||||
{
|
||||
stream.CopyTo(ms);
|
||||
var r = new List<byte>();
|
||||
r.AddRange(response.Headers.ToByteArray());
|
||||
//r.AddRange(encoding.GetBytes("\r\n"));
|
||||
r.AddRange(ms.ToArray());
|
||||
return r.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using Getf_Service_Transfer_Client_coreService.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Getf_Service_Transfer_Client_coreService;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_Service_HttpHandler
|
||||
{
|
||||
public class HttpDataHandler : IDataHandler
|
||||
{
|
||||
public TransInfo HandlerData(TransInfo srcData)
|
||||
{
|
||||
var r = new TransInfo();
|
||||
var action = srcData.Body.Action;
|
||||
if (String.IsNullOrWhiteSpace(action))
|
||||
{
|
||||
r.TransResultInfo = GetResult(-320, "Action(url|method)参数不能为空");
|
||||
return r;
|
||||
}
|
||||
var url = action;
|
||||
HttpService httpService = new HttpService();
|
||||
var jsonStr = String.IsNullOrWhiteSpace(srcData.Body.Param) ? "{}" : srcData.Body.Param;
|
||||
var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject<JObject>(jsonStr), out string msg);
|
||||
if (rData == null)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = -301,
|
||||
Message = msg
|
||||
};
|
||||
return r;
|
||||
}
|
||||
if (rData is string)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = 0,
|
||||
Message = (string)rData
|
||||
};
|
||||
return r;
|
||||
}
|
||||
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = 0
|
||||
};
|
||||
r.Data = (byte[])rData;
|
||||
return r;
|
||||
}
|
||||
|
||||
private TransResult GetResult(int code, string message)
|
||||
{
|
||||
return new TransResult()
|
||||
{
|
||||
Code = code,
|
||||
Message = message
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using Getf_Service_Transfer_Client_coreService;
|
||||
using Getf_Service_Transfer_Client_coreService.Entities;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_Service_HttpHandler
|
||||
{
|
||||
public class HttpJsonDataHandler : IDataHandler
|
||||
{
|
||||
public TransInfo HandlerData(TransInfo srcData)
|
||||
{
|
||||
var r = new TransInfo();
|
||||
var action = srcData.Body.Action;
|
||||
if (String.IsNullOrWhiteSpace(action))
|
||||
{
|
||||
r.TransResultInfo = GetResult(-320, "Action(url|method)参数不能为空");
|
||||
return r;
|
||||
}
|
||||
var url = action;
|
||||
HttpService httpService = new HttpService();
|
||||
var jsonStr = String.IsNullOrWhiteSpace(srcData.Body.Param) ? "{}" : srcData.Body.Param;
|
||||
var rData = httpService.DoRequest(url, JsonConvert.DeserializeObject<JObject>(jsonStr), out string msg);
|
||||
if (rData == null)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = -301,
|
||||
Message = msg
|
||||
};
|
||||
return r;
|
||||
}
|
||||
if (rData is string)
|
||||
{
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = 0,
|
||||
Message = (string)rData
|
||||
};
|
||||
return r;
|
||||
}
|
||||
|
||||
r.TransResultInfo = new TransResult()
|
||||
{
|
||||
Code = 0
|
||||
};
|
||||
r.Data = (byte[])rData;
|
||||
return r;
|
||||
}
|
||||
|
||||
private TransResult GetResult(int code, string message)
|
||||
{
|
||||
return new TransResult()
|
||||
{
|
||||
Code = code,
|
||||
Message = message
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
using Getf_Service_Transfer_Client_coreService.Helpers;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
|
||||
namespace Getf_Service_Transfer_Client_Service_HttpHandler
|
||||
{
|
||||
public class HttpService
|
||||
{
|
||||
LogHelper _LogHelper;
|
||||
|
||||
public HttpService()
|
||||
{
|
||||
_LogHelper = new LogHelper();
|
||||
}
|
||||
|
||||
public object DoRequest(string url, JObject jObject, out string msg)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest;
|
||||
|
||||
var head = jObject["Head"];
|
||||
Encoding encoding = new UTF8Encoding(false);
|
||||
if (jObject["Encoding"] != null)
|
||||
{
|
||||
encoding = Encoding.GetEncoding(jObject["Encoding"].Value<string>());
|
||||
}
|
||||
if (jObject["ContentType"] != null)
|
||||
{
|
||||
httpWebRequest.ContentType = jObject["ContentType"].Value<string>();
|
||||
}
|
||||
var method = "POST";
|
||||
if (jObject["Method"] != null)
|
||||
{
|
||||
method = jObject["Method"].Value<string>();
|
||||
}
|
||||
|
||||
SetHead(httpWebRequest, method, head);
|
||||
|
||||
object r;
|
||||
if (!"GET".Equals(method, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var requestStream = httpWebRequest.GetRequestStream();
|
||||
SetRequestStream(httpWebRequest, requestStream, jObject, encoding);
|
||||
r = GetResponse(httpWebRequest, encoding);
|
||||
requestStream.Close();
|
||||
requestStream.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
r = GetResponse(httpWebRequest, encoding);
|
||||
}
|
||||
msg = String.Empty;
|
||||
return r;
|
||||
}
|
||||
catch (WebException e)
|
||||
{
|
||||
using (var stream = e?.Response?.GetResponseStream())
|
||||
{
|
||||
msg = "http错误(" + (int)(e?.Response as HttpWebResponse)?.StatusCode + ")";
|
||||
if (stream != null)
|
||||
{
|
||||
using (StreamReader streamReader = new StreamReader(stream))
|
||||
{
|
||||
msg += streamReader.ReadToEnd();
|
||||
_LogHelper.Info("请求错误原因为:" + msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg += e.Message;
|
||||
_LogHelper.Info("请求错误原因为:" + msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
msg = e.Message;
|
||||
_LogHelper.Info("请求错误原因为:" + msg);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static PropertyInfo InnerCollectionProperty = typeof(WebHeaderCollection).GetProperty("InnerCollection",
|
||||
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
|
||||
|
||||
public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
|
||||
{
|
||||
var collection = InnerCollectionProperty.GetValue(header, null) as NameValueCollection;
|
||||
collection[name] = value;
|
||||
}
|
||||
|
||||
private void SetHead(HttpWebRequest httpWebRequest, string method, JToken head)
|
||||
{
|
||||
httpWebRequest.Method = method;
|
||||
if (head != null)
|
||||
{
|
||||
foreach (JProperty elem in head)
|
||||
{
|
||||
var name = elem.Name;
|
||||
var value = elem.Value.ToString();
|
||||
SetHeaderValue(httpWebRequest.Headers, name, value);
|
||||
}
|
||||
}
|
||||
if ("post".Equals(method, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(httpWebRequest.ContentType))
|
||||
{
|
||||
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SetRequestStream(HttpWebRequest httpWebRequest, Stream requestStream, JObject jObject, Encoding encoding)
|
||||
{
|
||||
using (var streamWrite = new StreamWriter(requestStream, encoding))
|
||||
{
|
||||
var param = jObject["Param"]?.Value<string>() ?? String.Empty;
|
||||
streamWrite.Write(param);
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly string[] TextContentTypes = new string[] { "application/json", "text/html" };
|
||||
|
||||
private object GetResponse(HttpWebRequest httpWebRequest, Encoding encoding)
|
||||
{
|
||||
var response = httpWebRequest.GetResponse();
|
||||
using (var stream = response.GetResponseStream())
|
||||
{
|
||||
if (IsTextContentType(response.ContentType))
|
||||
{
|
||||
using (StreamReader streamReader = new StreamReader(stream, encoding))
|
||||
{
|
||||
var r = streamReader.ReadToEnd();
|
||||
|
||||
return r;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (MemoryStream ms = new MemoryStream())
|
||||
{
|
||||
stream.CopyTo(ms);
|
||||
return ms.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsTextContentType(string contentType)
|
||||
{
|
||||
if (contentType == null) return true;
|
||||
contentType = contentType.ToLower();
|
||||
var list = new string[] { "text/", "application/json", "application/xml" };
|
||||
return list.Any(m => contentType.Contains(m));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,226 @@
|
||||
using Furion;
|
||||
using Furion.Logging;
|
||||
using Furion.Logging.Extensions;
|
||||
using Getf_Service_Transfer_Client_coreService.Entities;
|
||||
using Getf_Service_Transfer_Client_coreService.Helpers;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using SuperSocket.ClientEngine;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService
|
||||
{
|
||||
public class ClientService : IDisposable
|
||||
{
|
||||
private DateTime LastRecvTime = DateTime.Now;
|
||||
LogHelper _LogHelper = new LogHelper();
|
||||
private readonly IDataHandler DataHandler;
|
||||
private TcpClient TcpClient;
|
||||
private readonly string Ip;
|
||||
private readonly int Port;
|
||||
private Thread HeartThread;
|
||||
private bool IsRetrying;
|
||||
public ClientService()
|
||||
{
|
||||
//var serviceAddressInfo = "21".Split("1");
|
||||
var serviceAddressInfo = App.Configuration["Target:ServiceAddressInfo"].Split(':');
|
||||
Ip = serviceAddressInfo[0];
|
||||
Port = int.Parse(serviceAddressInfo[1]);
|
||||
//var assemblyInfo = "21".Split("1");
|
||||
var assemblyInfo = App.Configuration["Target:DataHandlerClassInfo"].Split(',');
|
||||
DataHandler = Assembly.Load(assemblyInfo[1]).CreateInstance(assemblyInfo[0]) as IDataHandler;
|
||||
//_LogHelper = new LogHelper();
|
||||
}
|
||||
|
||||
|
||||
public void Start()
|
||||
{
|
||||
StartNewEasyClient();
|
||||
DoHeart();
|
||||
}
|
||||
|
||||
private void DoDebug()
|
||||
{
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
Thread t = new Thread(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var r = GetRegisterEntity();
|
||||
r.Head.Type = 4;
|
||||
r.Data = new byte[100 * 1024 * 1024];
|
||||
Send(r.ToByte());
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
});
|
||||
t.Start();
|
||||
}
|
||||
}
|
||||
|
||||
private void StartNewEasyClient()
|
||||
{
|
||||
TcpClient = new TcpClient(Ip, Port, OnDataGeted, OnConnected, OnClosed, OnError);
|
||||
}
|
||||
|
||||
private void OnDataGeted(TransInfo transInfo)
|
||||
{
|
||||
LastRecvTime = DateTime.Now;
|
||||
if (transInfo.Body == null)//心跳包
|
||||
{
|
||||
/*//应用已被注册 再试
|
||||
if (transInfo.TransResultInfo != null && transInfo.TransResultInfo.Code == -210)
|
||||
{
|
||||
Reconnect(null, null);
|
||||
}*/
|
||||
if (transInfo.TransResultInfo != null && transInfo.TransResultInfo.Message == "注册成功!")
|
||||
{
|
||||
"注册成功".LogInformation();
|
||||
_LogHelper.Info("注册成功");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (transInfo.TransResultInfo != null && !String.IsNullOrWhiteSpace(transInfo.TransResultInfo.Message))
|
||||
{
|
||||
string info = "发生错误:" + transInfo.TransResultInfo.Message;
|
||||
info.LogError();
|
||||
_LogHelper.Error("发生错误:" + transInfo.TransResultInfo.Message);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var transResult = DataHandler.HandlerData(transInfo);
|
||||
|
||||
var r = GetRegisterEntity();
|
||||
r.Body = new TransBody()
|
||||
{
|
||||
Key = transInfo.Body.Key
|
||||
};
|
||||
r.Head.Type = 3;
|
||||
r.TransResultInfo = transResult.TransResultInfo;
|
||||
r.Data = transResult.Data;
|
||||
|
||||
Send(r.ToByte());
|
||||
}
|
||||
|
||||
private void OnConnected(object sender, EventArgs e)
|
||||
{
|
||||
IsRetrying = false;
|
||||
_LogHelper.Info("连接成功");
|
||||
"连接成功".LogInformation();
|
||||
Send(GetRegisterEntity().ToByte());
|
||||
}
|
||||
|
||||
private void OnClosed(object sender, EventArgs e)
|
||||
{
|
||||
"EasyClient.OnClosed".LogInformation();
|
||||
_LogHelper.Info("EasyClient.OnClosed");
|
||||
ReStart();
|
||||
}
|
||||
|
||||
private void OnError(object sender, EventArgs e)
|
||||
{
|
||||
string warn = "连接出错,原因为:" + ((ErrorEventArgs)e).Exception.Message;
|
||||
warn.LogWarning();
|
||||
//_LogHelper.Info("连接出错,原因为:" + ((ErrorEventArgs)e).Exception.Message);
|
||||
ReStart();
|
||||
}
|
||||
|
||||
private void ReStart()
|
||||
{
|
||||
Thread.Sleep(5000);
|
||||
StartNewEasyClient();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void DoHeart()
|
||||
{
|
||||
#if DEBUG
|
||||
/*for (int i = 0; i < 100; i++)
|
||||
{
|
||||
var testThread = new Thread(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
SendHeart();
|
||||
}
|
||||
});
|
||||
testThread.Start();
|
||||
}*/
|
||||
|
||||
#endif
|
||||
|
||||
HeartThread = new Thread(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if ((DateTime.Now - LastRecvTime).TotalMinutes > 10)
|
||||
{
|
||||
_LogHelper.Error("超过一分钟没收到心跳包的反馈信息");
|
||||
TcpClient.HeartLost();
|
||||
}
|
||||
if (TcpClient.IsConnected)
|
||||
{
|
||||
SendHeart();
|
||||
}
|
||||
Thread.Sleep(5 * 1000);
|
||||
}
|
||||
});
|
||||
HeartThread.Start();
|
||||
}
|
||||
|
||||
private void SendHeart()
|
||||
{
|
||||
var r = GetRegisterEntity();
|
||||
r.Head.Type = 4;
|
||||
Send(r.ToByte());
|
||||
}
|
||||
|
||||
private void Send(byte[] data)
|
||||
{
|
||||
if (!TcpClient.IsConnected) return;
|
||||
try
|
||||
{
|
||||
TcpClient.Send(data);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_LogHelper.Error("发送错误原因为:" + e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private TransInfo GetRegisterEntity()
|
||||
{
|
||||
var ts = TypeHelper.GetTimeStamp();
|
||||
var r = new TransInfo()
|
||||
{
|
||||
Head = new TransHead()
|
||||
{
|
||||
Type = 1,
|
||||
AppID = App.Configuration["Target:AppID"],
|
||||
AppSecret = App.Configuration["Target:AppSecret"],
|
||||
TimeStamp = ts,
|
||||
Sign = Md5Helper.Md5(ts + App.Configuration["Target:Key"])
|
||||
}
|
||||
};
|
||||
return r;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
TcpClient.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
using SuperSocket.ProtoBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using System.IO;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Entities
|
||||
{
|
||||
public class ReceiveFilter : FixedHeaderReceiveFilter<TransInfo>
|
||||
{
|
||||
public ReceiveFilter() : base(10)
|
||||
{
|
||||
|
||||
}
|
||||
protected override int GetBodyLengthFromHeader(IBufferStream bufferStream, int length)
|
||||
{
|
||||
bufferStream.ReadInt16();
|
||||
var len = GetStrLength(bufferStream) + GetDataLength(bufferStream);
|
||||
return len;
|
||||
}
|
||||
|
||||
public override TransInfo ResolvePackage(IBufferStream bufferStream)
|
||||
{
|
||||
((Stream)bufferStream).Position = 2;
|
||||
var strLength = GetStrLength(bufferStream);
|
||||
var dataLength = GetDataLength(bufferStream);
|
||||
var allLength = strLength + dataLength;
|
||||
|
||||
|
||||
byte[] buffer = new byte[strLength];
|
||||
bufferStream.Read(buffer, 0, strLength);
|
||||
var json = Encoding.UTF8.GetString(buffer);
|
||||
var r = JsonConvert.DeserializeObject<TransInfo>(json);
|
||||
if (r == null)
|
||||
{
|
||||
return new TransInfo();
|
||||
}
|
||||
buffer = new byte[dataLength];
|
||||
bufferStream.Read(buffer, 0, dataLength);
|
||||
r.Data = buffer;
|
||||
return r;
|
||||
}
|
||||
|
||||
/*protected override TransInfo ResolveRequestInfo(ArraySegment<byte> header, byte[] bodyBuffer, int offset, int length)
|
||||
{
|
||||
var strLength = BitConverter.ToInt32(header.Array, header.Offset + 2);
|
||||
var dataLength = BitConverter.ToInt32(header.Array, header.Offset + 6);
|
||||
|
||||
var json = Encoding.UTF8.GetString(bodyBuffer.Skip(offset).Take(strLength).ToArray());
|
||||
var r = JsonConvert.DeserializeObject<TransInfo>(json);
|
||||
r.Data = bodyBuffer.Skip(offset + strLength).Take(dataLength).ToArray();
|
||||
return r;
|
||||
}*/
|
||||
|
||||
private int GetStrLength(IBufferStream bufferStream)
|
||||
{
|
||||
byte[] buffer = new byte[4];
|
||||
bufferStream.Read(buffer, 0, 4);
|
||||
var r = BitConverter.ToInt32(buffer, 0);
|
||||
return r;
|
||||
}
|
||||
|
||||
private int GetDataLength(IBufferStream bufferStream)
|
||||
{
|
||||
byte[] buffer = new byte[4];
|
||||
bufferStream.Read(buffer, 0, 4);
|
||||
var r = BitConverter.ToInt32(buffer, 0);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Entities
|
||||
{
|
||||
public class TransBody
|
||||
{
|
||||
public string TargetAppID { get; set; }
|
||||
public string AppID { get; set; }
|
||||
public string AppSecret { get; set; }
|
||||
public string Action { get; set; }
|
||||
public string Param { get; set; }
|
||||
public string Key { get; set; }
|
||||
public string Url { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Entities
|
||||
{
|
||||
public class TransHead
|
||||
{
|
||||
public string AppID { get; set; }
|
||||
public string AppSecret { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 1 注册 2 请求
|
||||
/// </summary>
|
||||
public int Type { get; set; }
|
||||
|
||||
public string Param { get; set; }
|
||||
public string ServiceSecret { get; set; }
|
||||
|
||||
public long TimeStamp { get; set; }
|
||||
|
||||
public string Sign { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using Newtonsoft.Json;
|
||||
using SuperSocket.ProtoBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Entities
|
||||
{
|
||||
public class TransInfo : IPackageInfo
|
||||
{
|
||||
public TransHead Head { get; set; }
|
||||
|
||||
public TransBody Body { get; set; }
|
||||
|
||||
public TransResult TransResultInfo { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public byte[] Data { get; set; }
|
||||
|
||||
public static TransInfo Parse(byte[] buffer)
|
||||
{
|
||||
var strlength = BitConverter.ToInt32(buffer, 2);
|
||||
var byteLength = BitConverter.ToInt32(buffer, 6);
|
||||
var json = Encoding.UTF8.GetString(buffer.Skip(10).Take(strlength).ToArray());
|
||||
if (json == String.Empty)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var r = JsonConvert.DeserializeObject<TransInfo>(json);
|
||||
r.Data = buffer.Skip(10 + strlength).Take(byteLength).ToArray();
|
||||
return r;
|
||||
}
|
||||
|
||||
public byte[] ToByte()
|
||||
{
|
||||
List<byte> bufferHead = new List<byte>();
|
||||
bufferHead.AddRange(Encoding.UTF8.GetBytes("@@"));
|
||||
List<byte> bufferBody = new List<byte>();
|
||||
var json = JsonConvert.SerializeObject(this);
|
||||
bufferBody.AddRange(Encoding.UTF8.GetBytes(json));
|
||||
var strLength = bufferBody.Count;
|
||||
if (Data != null)
|
||||
{
|
||||
bufferBody.AddRange(Data);
|
||||
}
|
||||
bufferHead.AddRange(BitConverter.GetBytes(strLength));
|
||||
bufferHead.AddRange(BitConverter.GetBytes(Data == null ? 0 : Data.Length));
|
||||
bufferHead.AddRange(bufferBody);
|
||||
return bufferHead.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using Newtonsoft.Json;
|
||||
using SuperSocket.ProtoBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Entities
|
||||
{
|
||||
public class TransResult
|
||||
{
|
||||
public string Key { get; set; }
|
||||
|
||||
public int Code { get; set; }
|
||||
|
||||
public string Message { get; set; }
|
||||
|
||||
public byte[] Data { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Furion" Version="4.6.5" />
|
||||
<PackageReference Include="log4net" Version="2.0.15" />
|
||||
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
|
||||
<PackageReference Include="SuperSocket.ClientEngine" Version="0.10.0" />
|
||||
<PackageReference Include="SuperSocket.ProtoBase" Version="1.7.0.17" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="applicationconfig.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,51 @@
|
||||
using Furion.Logging.Extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Helpers
|
||||
{
|
||||
public class LogHelper
|
||||
{
|
||||
log4net.ILog MLog;
|
||||
|
||||
public LogHelper()
|
||||
{
|
||||
|
||||
MLog = log4net.LogManager.GetLogger("Getf.Transfer.Client");
|
||||
}
|
||||
|
||||
public void Debug(string msg)
|
||||
{
|
||||
MLog.Debug(msg);
|
||||
}
|
||||
|
||||
public void Error(string msg)
|
||||
{
|
||||
msg.LogError();
|
||||
MLog.Error(msg);
|
||||
}
|
||||
|
||||
public void Error(Exception exception)
|
||||
{
|
||||
exception.Message.LogError();
|
||||
|
||||
MLog.Error(exception.Message, exception);
|
||||
}
|
||||
|
||||
public void Info(string msg)
|
||||
{
|
||||
msg.LogInformation();
|
||||
|
||||
MLog.Info(msg);
|
||||
}
|
||||
|
||||
public void Warn(string msg)
|
||||
{
|
||||
msg.LogWarning();
|
||||
MLog.Warn(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Security.Cryptography;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Helpers
|
||||
{
|
||||
public static class Md5Helper
|
||||
{
|
||||
public static string Md5(string str)
|
||||
{
|
||||
MD5 md5 = MD5.Create();
|
||||
byte[] data = Encoding.UTF8.GetBytes(str);
|
||||
data = md5.ComputeHash(data);
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
sb.Append(data[i].ToString("x2"));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService.Helpers
|
||||
{
|
||||
public class TypeHelper
|
||||
{
|
||||
public static DateTime ToDateTime(long timeStamp)
|
||||
{
|
||||
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
|
||||
DateTime dt = startTime.AddSeconds(timeStamp);
|
||||
return dt;
|
||||
}
|
||||
public static long GetTimeStamp()
|
||||
{
|
||||
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
|
||||
long t = (long)(DateTime.Now - startTime).TotalSeconds;
|
||||
return t;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using Getf_Service_Transfer_Client_coreService.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService
|
||||
{
|
||||
public interface IDataHandler
|
||||
{
|
||||
TransInfo HandlerData(TransInfo srcData);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
using Getf_Service_Transfer_Client_coreService.Entities;
|
||||
using Newtonsoft.Json;
|
||||
using SuperSocket.ClientEngine;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace Getf_Service_Transfer_Client_coreService
|
||||
{
|
||||
public class TcpClient: IDisposable
|
||||
//private Thread SendHeartThread;
|
||||
{
|
||||
string Ip { get; set; }
|
||||
int Port { get; set; }
|
||||
EasyClient EasyClient;
|
||||
bool IsHeartLosted = false;
|
||||
Action<object, EventArgs> OnClosed;
|
||||
public bool IsConnected { get { return EasyClient.IsConnected; } }
|
||||
|
||||
public TcpClient(string ip, int port, Action<TransInfo> onDataGeted, Action<object, EventArgs> onConnected, Action<object, EventArgs> onClosed, Action<object, EventArgs> onError)
|
||||
{
|
||||
Ip = ip;
|
||||
Port = port;
|
||||
|
||||
EasyClient = new EasyClient();
|
||||
EasyClient.Initialize(new ReceiveFilter(), onDataGeted);
|
||||
EasyClient.Connected += new EventHandler(onConnected);
|
||||
EasyClient.Closed += EasyClient_Closed;
|
||||
EasyClient.Error += new EventHandler<ErrorEventArgs>(onError);
|
||||
EasyClient.ConnectAsync(new IPEndPoint(IPAddress.Parse(Ip), Port));
|
||||
OnClosed = onClosed;
|
||||
|
||||
//SendHeartThread = new Thread();
|
||||
}
|
||||
|
||||
public void Send(byte[] data)
|
||||
{
|
||||
EasyClient.Send(data);
|
||||
}
|
||||
|
||||
private void EasyClient_Closed(object sender, EventArgs e)
|
||||
{
|
||||
if (IsHeartLosted) return;
|
||||
OnClosed?.Invoke(sender, e);
|
||||
}
|
||||
|
||||
public void HeartLost()
|
||||
{
|
||||
//IsHeartLosted = true;
|
||||
EasyClient.Close();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
HeartLost();
|
||||
//SendHeartThread.Abort();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"SpecificationDocumentSettings": {
|
||||
"DocumentTitle": "Ewide",
|
||||
"DocExpansionState": "None",
|
||||
"GroupOpenApiInfos": [
|
||||
{
|
||||
"Group": "Default",
|
||||
"Title": "Admin.NET通用权限管理平台",
|
||||
"Description": "前后端分离架构,开箱即用,紧随前沿技术。<br/>后台.NET5平台基于Furion框架,前端基于XiaoNuo生态技术框架的vue版本。<br/><a href='https://dotnetchina.gitee.io/furion/'>Furion框架,让 .NET 开发更简单,更通用,更流行</a><br/><a href='https://gitee.com/xiaonuobase/xiaonuo-vue/'>XiaoNuo前端框架采用Vue2.x + AntDesign Vue pro1.x + Axios</a>",
|
||||
"Version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"Group": "HouseBusiness",
|
||||
"Title": "内外网交互",
|
||||
"Version": "1.0.1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Target": {
|
||||
"ServiceAddressInfo": "127.0.0.1:8111", //目标服务器地址
|
||||
"DataHandlerClassInfo": "Getf_Service_Transfer_Client_Service_HttpHandler.HttpDataHandler,Getf_Service_Transfer_Client_Service_HttpHandler",
|
||||
"AppID": "test",
|
||||
"AppSecret": "b7ybdg482IXFsojQ4feDHf4NaiSLRtFjL7MVI6ysnvjrZ6jikFX74tVZhZKYG23A",
|
||||
"Key": "TVgSoGYNJrnU7Kg6Csuodh4IdxqZGxpEJAdRlEcTn72KlUgAiHcr7bdxLKFf9pJ6"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information"
|
||||
// .... appsettings 默认配置
|
||||
},
|
||||
"File": {
|
||||
"FileName": "application.log", // 日志文件完整路径或文件名,推荐 .log 作为拓展名
|
||||
"Append": true, // 追加到已存在日志文件或覆盖它们
|
||||
"MinimumLevel": "Information", // 最低日志记录级别
|
||||
"FileSizeLimitBytes": 0, // 控制每一个日志文件最大存储大小,单位是 B,也就是 1024 才等于 1KB,默认无限制,如果指定了该值,那么日志文件大小超出了该配置就会创建新的日志文件,新创建的日志文件命名规则:文件名+[递增序号].log
|
||||
"MaxRollingFiles": 0 // 控制最大创建的日志文件数量,默认无限制,配合 FileSizeLimitBytes 使用,如果指定了该值,那么超出该值将从最初日志文件中从头写入覆盖
|
||||
}
|
||||
},
|
||||
"server.urls": "http://*:5025"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Worker">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<UserSecretsId>dotnet-Getf_Service_Transfer_core_client-A49AB986-D7BC-4882-BAB1-48CAF75741A2</UserSecretsId>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="5.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Getf_Service_Transfer_Client_coreService\Getf_Service_Transfer_Client_coreService.csproj" />
|
||||
<ProjectReference Include="..\Getf_Service_Transfer_Client_Service_HttpHandler\Getf_Service_Transfer_Client_Service_HttpHandler.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
51
93_nei_core/Getf_Service_Transfer_core_client/Program.cs
Normal file
51
93_nei_core/Getf_Service_Transfer_core_client/Program.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_core_client
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CreateHostBuilder(args).Build().Run();
|
||||
}
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args)
|
||||
.Inject()
|
||||
.ConfigureServices((hostContext, services) =>
|
||||
{
|
||||
//根据日志级别输出
|
||||
services.AddFileLogging("infomation.log", options =>
|
||||
{
|
||||
options.WriteFilter = (logMsg) =>
|
||||
{
|
||||
return logMsg.LogLevel == LogLevel.Information;
|
||||
};
|
||||
});
|
||||
services.AddFileLogging("error.log", options =>
|
||||
{
|
||||
options.WriteFilter = (logMsg) =>
|
||||
{
|
||||
return logMsg.LogLevel == LogLevel.Error;
|
||||
};
|
||||
});
|
||||
services.AddFileLogging("warn.log", options =>
|
||||
{
|
||||
options.WriteFilter = (logMsg) =>
|
||||
{
|
||||
return logMsg.LogLevel == LogLevel.Warning;
|
||||
};
|
||||
});
|
||||
// services.AddHostedService<Worker>();
|
||||
})
|
||||
//.UseWindowsService() ///windows部署
|
||||
.UseSystemd(); //LIUNX部署
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"profiles": {
|
||||
"Getf_Service_Transfer_core_client": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": "true",
|
||||
"environmentVariables": {
|
||||
"DOTNET_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
93_nei_core/Getf_Service_Transfer_core_client/Worker.cs
Normal file
33
93_nei_core/Getf_Service_Transfer_core_client/Worker.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Getf_Service_Transfer_Client_coreService;
|
||||
using Getf_Service_Transfer_Client_coreService.Helpers;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Getf_Service_Transfer_core_client
|
||||
{
|
||||
public class Worker : BackgroundService
|
||||
{
|
||||
private readonly ILogger<Worker> _logger;
|
||||
LogHelper _LogHelper;
|
||||
ClientService _ClientService;
|
||||
public Worker(ILogger<Worker> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
_ClientService = new ClientService();
|
||||
_ClientService.Start();
|
||||
//msg.LogInformation();
|
||||
//_logger.LogInformation("GET Pages.PrivacyModel called.");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user