You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
7.1 KiB
258 lines
7.1 KiB
using EasyBL.WebApi.Message;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace EasyBL
|
|
{
|
|
public class ServiceBase : MessageBase
|
|
{
|
|
public const string SERVICE = "service";
|
|
|
|
protected Dictionary<string, object> _dicInitData;
|
|
|
|
private static string _sRootPath = null;
|
|
public static string RootPath { get { return _sRootPath; } }
|
|
|
|
public static void SetRootPath(string i_sRootPath)
|
|
{
|
|
_sRootPath = i_sRootPath;
|
|
}
|
|
|
|
#region 1-1-1
|
|
|
|
/// <summary>
|
|
/// 1-1-1 JS路徑
|
|
/// </summary>
|
|
protected virtual string JSPath
|
|
{
|
|
get { return "NOT SET"; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 1-1-1 HTML路徑
|
|
/// </summary>
|
|
protected virtual string HTMLPath
|
|
{
|
|
get { return "NOT SET"; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 1-1-1 JS Version
|
|
/// </summary>
|
|
protected string JSVersion
|
|
{
|
|
get { return _getVersion(JSPath, "g_JSRevisionVersioin"); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 1-1-1 JS Version
|
|
/// </summary>
|
|
protected string HTMLVersion
|
|
{
|
|
get { return _getVersion(HTMLPath, "g_HTMLRevisionVersioin"); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得Service版本號
|
|
/// </summary>
|
|
protected string ServiceVersion
|
|
{
|
|
get { return ParseServiceVersion(); }
|
|
}
|
|
|
|
private static string _getVersion(string i_sPath, string i_sPattern)
|
|
{
|
|
var sRes = "-1";
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
if (i_sPath == "NOT SET")
|
|
{
|
|
break;
|
|
}
|
|
|
|
var sPath = System.IO.Path.Combine(RootPath, i_sPath);
|
|
if (!System.IO.File.Exists(sPath))
|
|
{
|
|
break;
|
|
}
|
|
|
|
var sContent = System.IO.File.ReadAllText(sPath);
|
|
var nIdx = sContent.LastIndexOf(i_sPattern, StringComparison.Ordinal);
|
|
if (nIdx == -1)
|
|
{
|
|
break;
|
|
}
|
|
|
|
var nVersionStart = sContent.IndexOf('"', nIdx);
|
|
|
|
if (nVersionStart == -1)
|
|
{
|
|
break;
|
|
}
|
|
|
|
nVersionStart++;
|
|
|
|
var nVersionEnd = sContent.IndexOf('"', nVersionStart);
|
|
|
|
if (nVersionEnd == -1)
|
|
{
|
|
break;
|
|
}
|
|
|
|
sRes = sContent.Substring(nVersionStart, nVersionEnd - nVersionStart);
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sRes = Util.GetLastExceptionMsg(ex);
|
|
}
|
|
|
|
return sRes;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得Service版本號
|
|
/// </summary>
|
|
/// <returns>版號。 -1表示沒有取得版本號</returns>
|
|
protected string ParseServiceVersion()
|
|
{
|
|
var sRes = "-1";
|
|
|
|
var pi = this.GetType().GetProperty("ServiceRevisionVersion");
|
|
|
|
if (pi != null)
|
|
{
|
|
var oValue = pi.GetValue(this, null);
|
|
|
|
if (oValue != null)
|
|
{
|
|
sRes = oValue.ToString();
|
|
}
|
|
}
|
|
|
|
return sRes;
|
|
}
|
|
|
|
public Dictionary<string, string> VersionInfo
|
|
{
|
|
get
|
|
{
|
|
return new Dictionary<string, string>() {
|
|
{ "html", HTMLVersion },
|
|
{ "js", JSVersion },
|
|
{ "service", ServiceVersion },
|
|
{ "htmlpath", HTMLPath },
|
|
{ "jspath", JSPath },
|
|
{ "servicename", this.GetType().Name }
|
|
};
|
|
}
|
|
}
|
|
|
|
#endregion 1-1-1
|
|
|
|
public ResponseMessage Entry(RequestMessage i_crm)
|
|
{
|
|
string sMsg = null;
|
|
ResponseMessage rm = null;
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
// Find Native Method
|
|
var sFunctionName = i_crm.TYPE;
|
|
|
|
if (null == sFunctionName)
|
|
{
|
|
//sMsg = string.Format("NO METHOD - {0}", sFunctionName);
|
|
sMsg = BaseExceptionWord.ex000001; //NO METHOD
|
|
break;
|
|
}
|
|
|
|
var mi = this.GetType().GetMethod(sFunctionName);
|
|
if (null == mi)
|
|
{
|
|
//sMsg = string.Format("NO MATCH METHOD - {0}", sFunctionName);
|
|
sMsg = BaseExceptionWord.ex000002; //NO MATCH METHOD
|
|
break;
|
|
}
|
|
|
|
object[] ao = { i_crm };
|
|
|
|
rm = (ResponseMessage)mi.Invoke(this, ao);
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
}
|
|
|
|
if (null != sMsg)
|
|
{
|
|
//crm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
|
|
return rm;
|
|
}
|
|
|
|
public static string MakeDebugFullDump(string i_sMsg, RequestMessage i_crm)
|
|
{
|
|
var sRes = Environment.NewLine;
|
|
|
|
sRes += "**** Start Dump **************************" + Environment.NewLine;
|
|
sRes += $"Custom Message:{i_sMsg}" + Environment.NewLine;
|
|
sRes += $"Parameter Json:{JsonConvert.SerializeObject(i_crm)}" + Environment.NewLine;
|
|
sRes += "Call Stack Dump:" + Environment.NewLine;
|
|
sRes += Environment.StackTrace + Environment.NewLine;
|
|
sRes += "*****End Dump *************************" + Environment.NewLine;
|
|
|
|
return sRes;
|
|
}
|
|
|
|
public static string JProperty2Dic(JObject i_jpData, ref Dictionary<string, object> io_dicData)
|
|
{
|
|
string sRes = null;
|
|
var dicRes = new Dictionary<string, object>();
|
|
|
|
try
|
|
{
|
|
foreach (JProperty property in i_jpData.Properties())
|
|
{
|
|
var jv = property.Value;
|
|
dicRes.Add(property.Name, jv.Value<string>());
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sRes = Util.GetLastExceptionMsg(ex);
|
|
}
|
|
|
|
io_dicData = dicRes;
|
|
return sRes;
|
|
}
|
|
|
|
#region JsonToString
|
|
|
|
/// <summary>
|
|
/// 轉換json字串
|
|
/// </summary>
|
|
/// <param name="o">要轉化的物件</param>
|
|
public static string JsonToString(object o)
|
|
{
|
|
if (o != null)
|
|
{
|
|
return JsonConvert.SerializeObject(o, Formatting.Indented);//序列化,將物件轉化為字符串
|
|
}
|
|
return "";
|
|
}
|
|
|
|
#endregion JsonToString
|
|
}
|
|
}
|