protected override void Dispose(ParameterStd p, DataCollection d) { var wp = (EWRAParameter)p; wp.Dispose(); d.Dispose(); }
protected override void Run(ParameterStd p, DataCollection d) { var rp = (RazorParam)p; var rd = (RazorData)d; rd.RenderText = renderer.RenderViewToString(excuteFilePath, rp.ViewPath, rp.CurrentHttpContext, rp.Model, rp.ViewList).GetAwaiter().GetResult();; }
/// <summary> /// 等待异步操作完成,执行过程中有异常则会引发异常的抛出 /// </summary> /// <param name="p"></param> /// <param name="data"></param> public void WaitMe(ParameterStd p, DataCollection data) { if (p.ExtentionObj.async != null && p.ExtentionObj.async is Task) { ((Task)p.ExtentionObj.async).Wait(); } }
public override bool CheckParametersAndConfig(ParameterStd p, DataCollection d) { if (!(p is RazorParam)) { return(false); } if (!(d is RazorData)) { return(false); } var rp = (RazorParam)p; if (string.IsNullOrEmpty(rp.ViewPath)) { GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, "Razor引擎缺少ViewPath参数"); return(false); } if (rp.CurrentHttpContext == null) { GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, "Razor引擎缺少HttpContext参数"); return(false); } return(true); }
protected override void Run(ParameterStd p, DataCollection d) { var tp = (TParameter)p; var td = (TData)d; _context = tp.CurrentHttpContext; //var startdt = DateTime.Now; //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, string.Format("Before {0} Process Request Memory:{1}", _requesturi.AbsoluteUri, ComFunc.GetProcessUsedMemory())); var dt = DateTime.Now; var dtstart = DateTime.Now; //进行参数初始化 BeforeProcess(tp, td); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"excute:{_context.Request.Method} \"{tp.RequestUri}\" BeforeProcess cast time:{(DateTime.Now - dt).TotalMilliseconds}ms "); dt = DateTime.Now; //业务逻辑操作 InvokeAction(tp, td); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"excute:{_context.Request.Method} \"{tp.RequestUri}\" InvokeAction cast time:{(DateTime.Now - dt).TotalMilliseconds}ms "); dt = DateTime.Now; //session和cookie等的设置必须在response回写之前处理,否则会报异常 AfterProcess(tp, td); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"excute:{_context.Request.Method} \"{tp.RequestUri}\" AfterProcess cast time:{(DateTime.Now - dt).TotalMilliseconds}ms "); //dt = DateTime.Now; //进行response的回写 SetResponseContent(tp, td); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"excute:{_context.Request.Method} \"{tp.RequestUri}\" SetResponseContent cast time:{(DateTime.Now - dt).TotalMilliseconds}ms "); dt = DateTime.Now; //收尾作业 FinishedProcess(tp, td); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"excute:{_context.Request.Method} \"{tp.RequestUri}\" FinishedProcess cast time:{(DateTime.Now - dt).TotalMilliseconds}ms "); dt = DateTime.Now; GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, $"excute:{_context.Request.Method} \"{tp.RequestUri}\" cast time:{(DateTime.Now - dtstart).TotalMilliseconds}ms "); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, string.Format("After {0} Process Request Memory:{1}", _requesturi.AbsoluteUri, ComFunc.GetProcessUsedMemory())); //GlobalCommon.Logger.WriteLog(LoggerLevel.DEBUG, string.Format("Time cost {0}ms", (DateTime.Now - startdt).TotalMilliseconds)); }
protected override void Run(ParameterStd p, DataCollection d) { var tp = (TagParameter)p; var td = (TagData)d; Init(tp, td); DoProcess(tp, td); }
protected override void Run(ParameterStd p, DataCollection d) { var tp = (TParameter)p; var td = (TData)d; var socket = CurrentContext.WebSockets.AcceptWebSocketAsync().GetAwaiter().GetResult(); ProcessWebSocketAsync(socket); }
protected override void OnError(Exception ex, ParameterStd p, DataCollection d) { var tp = (TParameter)p; var td = (TData)d; tp.Resources.RollbackTransaction(tp.CurrentTransToken); throw new Exception($"{this.GetType().Name}处理出错:" + ex.Message, ex.InnerException == null?ex:ex.InnerException); }
protected override void OnError(Exception ex, ParameterStd p, DataCollection d) { p.Resources.RollbackTransaction(p.CurrentTransToken); GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, ex.Message + "\n" + ex.StackTrace); if (ex.InnerException != null) { GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, ex.InnerException.Message + "\n" + ex.InnerException.StackTrace); } }
protected override void Run(ParameterStd p, DataCollection d) { var tp = (TParameter)p; var td = (TData)d; InvokeBusiness(tp, td); AfterProcess(tp, td); tp.Resources.CommitTransaction(tp.CurrentTransToken); }
protected override void Dispose(ParameterStd p, DataCollection d) { var gbp = (GoBusiParameter)p; var gbd = (GoBusiData)d; gbp.WebParam = null; gbd.WebData = null; gbp.Dispose(); gbd.Dispose(); }
protected override void Run(ParameterStd p, DataCollection d) { var tp = (TParameter)p; var td = (TData)d; BeforeProcess(tp, td); InvokeAction(tp, td); AfterProcess(tp, td); SetResponseContent(tp, td); FinishedProcess(tp, td); }
public void StepStart(ParameterStd p, DataCollection d) { try { Run(p, d); } catch (Exception ex) { OnError(ex, p, d); } }
public bool CallModule(ParameterStd p, DataCollection data) { if (_module == null) { LoadModule(); } _module.StepStart(p, data); return(true); }
/// <summary> /// 执行异步操作结束操作 /// 等待作业处理完成,如果执行的过程中有异常,则会抛出异常 /// </summary> /// <param name="p"></param> /// <param name="data"></param> /// <returns></returns> public bool EndCallModule(ParameterStd p, DataCollection data) { if (p.ExtentionObj.async != null && p.ExtentionObj.async is Task) { ((Task)p.ExtentionObj.async).Wait(); if (((Task)p.ExtentionObj.async).Exception != null) { throw ((Task)p.ExtentionObj.async).Exception; } } AfterProcess(p, data); return(true); }
/// <summary> /// 执行异步操作,在该模式下,参数集会复制使其线程独占,数据集则采用线程共享模式 /// 异步操作处理时,不提供中断操作 /// </summary> /// <param name="p"></param> /// <param name="data"></param> /// <param name="callback"></param> /// <returns></returns> public bool BeginCallModule(ParameterStd p, DataCollection data, Action <ParameterStd, DataCollection> callback) { var task = Task.Run(() => { var m = GetModule(p, data); m.StepStart(p, data); if (callback != null) { callback.Invoke(p, data); } }); p.ExtentionObj.async = task; return(true); }
public override bool CheckParametersAndConfig(ParameterStd p, DataCollection d) { if (!(p is TParameter)) { return(false); } if (!(d is TData)) { return(false); } var tp = (TParameter)p; var td = (TData)d; return(true); }
/// <summary> /// 同步调用一个模块 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="p"></param> /// <param name="data"></param> /// <returns></returns> public static bool Call <T>(ParameterStd p, DataCollection data) where T : IModularProxy { bool rtn = false; T t = default(T); try { t = (T)Activator.CreateInstance(typeof(T), true); rtn = t.CallModule(p, data); } catch (Exception ex) { t.OnError(ex, p, data); } return(rtn); }
protected override void Dispose(ParameterStd p, DataCollection d) { if (p == null) { return; } var rp = (RazorParam)p; rp.Resources.Dispose(); rp.CurrentTransToken.Release(); rp.TransTokenList.Clear(); rp.ViewPath = null; rp.CurrentHttpContext = null; rp.ViewList = null; rp.Model = null; GC.Collect(); }
public override bool CheckParametersAndConfig(ParameterStd p, DataCollection d) { if (!(p is TParameter)) { return(false); } if (!(d is TData)) { return(false); } var rp = (TParameter)p; if (rp.CurrentHttpContext == null) { return(false); } return(true); }
public override bool CheckParametersAndConfig(ParameterStd p, DataCollection d) { if (!(p is HttpParameter)) { return(false); } if (!(d is ResponseObject)) { return(false); } var hp = (HttpParameter)p; if (hp.ToUrl == "") { return(false); } return(true); }
public DataCollection DoOperate(ParameterStd p) { string flag = p.GetValue <string>("_unit_action_flag_"); UnitParameter up = (UnitParameter)p; T t = (T)Activator.CreateInstance(typeof(T), true); var sqlobj = t.GetSqlFunc(flag)(up); if (!(sqlobj is FrameDLRObject)) { throw new TypeRequiredException("需要的动态数据对象类型应该为FrameDLRObject"); } IDBAccessInfo dba = up.Dao; DBOParameterCollection dbc = up.SPParameter; UnitDataCollection rtn = new UnitDataCollection(); if (dba is ADBAccess) { bool isrturnds = sqlobj.isreturnds != null ? sqlobj.isreturnds : false; DBDataCollection dbrtn = ((ADBAccess)dba).ExcuteProcedure(ComFunc.nvl(sqlobj.spname), isrturnds, ref dbc); if (dbrtn.IsSuccess) { foreach (string s in dbrtn.Keys) { if (dbrtn[s] is DataSetStd) { rtn.QueryDatas = dbrtn.ReturnDataSet; } else { rtn.SetValue(s, dbrtn[s]); } } } } return(rtn); }
protected override void OnError(Exception ex, ParameterStd p, DataCollection d) { var wp = (WebParameter)p; var wd = (GoData)d; GlobalCommon.ExceptionProcessor.ProcessException(this, ex, p, d); string errorCode = "E-" + DateTime.Now.ToString("yyyyMMddHHmmssfff"); string errlog = ""; if (ex is HostJsException) { var jex = (HostJsException)ex; if (ex.InnerException != null) { if (ex.InnerException is HostJsException) { var ijex = (HostJsException)ex.InnerException; errlog = string.Format("错误编号:{0},\n{1}\n{2}\n出错代码行数{3}\n出错代码列数{4}\n出错代码位置{5}\nInnerException:{6}\n{7}\n出错代码行数{8}\n出错代码列数{9}\n出错代码位置{10}", errorCode, ex.Message, ex.StackTrace, jex.Line, jex.Column, jex.SourceCode.Replace("\"", "'"), ex.InnerException.Message, ex.InnerException.StackTrace, ijex.Line, ijex.Column, ijex.SourceCode.Replace("\"", "'")); } else { errlog = string.Format("错误编号:{0},\n{1}\n{2}\n出错代码行数{3}\n出错代码列数{4}\n出错代码位置{5}\nInnerException:{6}\n{7}", errorCode, ex.Message, ex.StackTrace, jex.Line, jex.Column, jex.SourceCode, ex.InnerException.Message, ex.InnerException.StackTrace); } } else { errlog = string.Format("错误编号:{0},\n{1}\n{2}\n出错代码行数{3}\n出错代码列数{4}\n出错代码位置{5}", errorCode, ex.Message, ex.StackTrace, jex.Line, jex.Column, jex.SourceCode.Replace("\"", "'")); } } else { if (ex.InnerException != null) { if (ex.InnerException is HostJsException) { var ijex = (HostJsException)ex.InnerException; errlog = string.Format("错误编号:{0},\n{1}\n{2}\nInnerException:{3}\n{4}\n\n出错代码行数{5}\n出错代码列数{6}\n出错代码位置{7}", errorCode, ex.Message, ex.StackTrace, ex.InnerException.Message, ex.InnerException.StackTrace, ijex.Line, ijex.Column, ijex.SourceCode.Replace("\"", "'")); } else { errlog = string.Format("错误编号:{0},\n{1}\n{2}\nInnerException:{3}\n{4}", errorCode, ex.Message, ex.StackTrace, ex.InnerException.Message, ex.InnerException.StackTrace); } } else { errlog = string.Format("错误编号:{0},\n{1}\n{2}", errorCode, ex.Message, ex.StackTrace); } } GlobalCommon.Logger.WriteLog(LoggerLevel.ERROR, errlog); var errormsg = ""; var isdebug = p[DomainKey.CONFIG, "DebugMode"] == null ? false : (bool)p[DomainKey.CONFIG, "DebugMode"]; if (isdebug) { errormsg = string.Format("出错了,{0}", errlog);; } else { errormsg = string.Format("系统出错了,请联系相关人员帮助处理,并告知其错误编号。谢谢!(错误编号:{0})", errorCode); } CurrentContext.Response.StatusCode = 200; var jsonmsg = ComFunc.FormatJSON(errorCode, errormsg, "").ToJSONString(); var msgbytelength = Encoding.UTF8.GetByteCount(jsonmsg); CurrentContext.Response.Headers.Add("Content-Length", msgbytelength + ""); if (wd.ContentType == GoResponseDataType.Json) { CurrentContext.Response.ContentType = ResponseHeader_ContentType.json + ";charset=utf-8"; CurrentContext.Response.WriteAsync(jsonmsg).Wait(); } else if (wd.ContentType == GoResponseDataType.RazorView) { CurrentContext.Response.ContentType = ResponseHeader_ContentType.json + ";charset=utf-8"; CurrentContext.Response.WriteAsync(jsonmsg).Wait(); } else if (wd.ContentType == GoResponseDataType.HostView) { //var viewpath = "~/error.hjs".Replace("~", GlobalCommon.HostCommon.RootPath + HostJsConstants.COMPILED_VIEW_PATH); //if (File.Exists(viewpath)) //{ // //调用hostview引擎进行渲染 // HostJsView hjv = (HostJsView)p.ExtentionObj.hostviewengine; // hjv.CurrentContext.SetDataModel(FrameDLRObject.CreateInstanceFromat(@"{ErrorTitle:{0},ErrorMsg:{1}}", "系统出错了", errormsg).ToDictionary()); // var html = hjv.Render(File.ReadAllText(viewpath, Encoding.UTF8)); // CurrentContext.Response.ContentType = ResponseHeader_ContentType.html + ";charset=utf-8"; // CurrentContext.Response.WriteAsync(html).Wait(); //} //else //{ // CurrentContext.Response.ContentType = ResponseHeader_ContentType.json + ";charset=utf-8"; // CurrentContext.Response.WriteAsync(ComFunc.FormatJSON(errorCode, errlog, "").ToJSONString()).Wait(); //} } else { CurrentContext.Response.ContentType = ResponseHeader_ContentType.json + ";charset=utf-8"; CurrentContext.Response.WriteAsync(jsonmsg).Wait(); } CurrentContext.Response.Body.FlushAsync().Wait(); }
public virtual void OnError(Exception ex, ParameterStd p, DataCollection data) { throw ex; }
protected override void OnError(Exception ex, ParameterStd p, DataCollection d) { throw ex; }
public DataCollection DoOperate(ParameterStd p) { string flag = p.GetValue <string>("_unit_action_flag_"); //预执行 T t = (T)Activator.CreateInstance(typeof(T), true); UnitParameter up = (UnitParameter)p; UnitDataCollection rtn = new UnitDataCollection(); if (up.Dao is ADBAccess) { var sqlobj = t.GetSqlFunc(flag)(up); ADBAccess dba = (ADBAccess)up.Dao; string regstr = ""; string regexpress = @"(?isx) (') #开始标记“<tag...>” (?> #分组构造,用来限定量词“*”修饰范围 \1 (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 |\1 (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 |[^']* #右侧不为开始或结束标记的任意字符 ) (?(Open)(?!)) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 \1 #结束标记“</tag>” "; string tmpsql = ""; if (dba is OracleAccess) { regstr = @"(?<=:)[a-zA-Z0-9_]*\d*"; } else { regstr = @"(?<=@)[A-Za-z0-9_]+\d*"; } Regex re = new Regex(regstr); Regex re2 = new Regex(regexpress); try { if (!(sqlobj is FrameDLRObject)) { throw new TypeRequiredException("需要指定的动态数据对象:FrameDLRObject"); } string presql = sqlobj.presql; DBAPageP dbc = new DBAPageP(); dba.BeginTransaction(); if (!string.IsNullOrEmpty(presql)) { tmpsql = presql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString())); } dba.ExecuteNoQuery(presql, dbc.SQL_Parameters); } //执行翻页查询 string sql = sqlobj.sql; string orderby = sqlobj.orderby; if (!string.IsNullOrEmpty(sql)) { tmpsql = sql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } dbc.SQL_Parameters.Clear(); foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { if (up.GetValue(m.ToString()) is byte[]) { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Binary); } else { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString())); } } dbc.SQL = sql; dbc.OrderBy = orderby; dbc.Count_of_OnePage = up.Count_Of_OnePage; dbc.CurrentPage = up.CurrentPage; dba.StartPageByCondition(dbc); rtn.QueryTable = dba.GoToPage(up.ToPage); rtn.Count_Of_OnePage = up.Count_Of_OnePage; rtn.CurrentPage = dba.CurrentPage; rtn.TotalPage = dba.TotalPage; rtn.TotalRow = dba.TotalRow; } //收尾处理 string aftersql = sqlobj.aftersql; if (!string.IsNullOrEmpty(aftersql)) { tmpsql = aftersql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } dbc.SQL_Parameters.Clear(); foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { dbc.SQL_Parameters.Add(m.ToString(), up.GetValue(m.ToString())); } dba.ExecuteNoQuery(aftersql, dbc.SQL_Parameters); } dba.CommitTransaction(); } catch { if (dba != null) { dba.RollbackTransaction(); } throw; } } return(rtn); }
protected override void OnError(Exception ex, ParameterStd p, DataCollection d) { throw new RazorException("Razor parse failed!" + ex.Message, ex); }
public DataCollection DoOperate(ParameterStd p) { UnitDataCollection rtn = new UnitDataCollection(); string flag = p.GetValue <string>("_unit_action_flag_"); UnitParameter up = (UnitParameter)p; if (up.Dao is ADBAccess) { T t = (T)Activator.CreateInstance(typeof(T), true); var sqlobj = t.GetSqlFunc(flag)(up); if (!(sqlobj is FrameDLRObject)) { throw new TypeRequiredException("需要指定的动态数据对象:FrameDLRObject"); } string sql = sqlobj.sql; ADBAccess dba = (ADBAccess)up.Dao; DBOParameterCollection dbc = new DBOParameterCollection(); if (!string.IsNullOrEmpty(sql)) { string regstr = ""; regstr = @"(?<=" + (dba.ParameterFlagChar == "$"?"\\$": dba.ParameterFlagChar) + @")[A-Za-z0-9_]+\d*"; string regexpress = @"(?isx) (') #开始标记“<tag...>” (?> #分组构造,用来限定量词“*”修饰范围 \1 (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 |\1 (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 |[^']* #右侧不为开始或结束标记的任意字符 ) (?(Open)(?!)) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 \1 #结束标记“</tag>” "; Regex re = new Regex(regstr); string tmpsql = ""; Regex re2 = new Regex(regexpress); tmpsql = sql.Replace("''", "#sp#"); foreach (Match m in re2.Matches(tmpsql)) { tmpsql = tmpsql.Replace(m.Value, "#sp#"); } foreach (System.Text.RegularExpressions.Match m in re.Matches(tmpsql)) { if (up.GetValue(m.ToString()) is byte[]) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Binary); } else if (up.GetValue(m.ToString()) is DateTime) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.DateTime); } else if (up.GetValue(m.ToString()) is int) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Int32); } else if (up.GetValue(m.ToString()) is double) { dbc.Add(m.ToString(), up.GetValue(m.ToString()), System.Data.DbType.Double); } else { dbc.Add(m.ToString(), up.GetValue(m.ToString())); } } } try { rtn.QueryDatas = dba.Query(sql, dbc); }catch (Exception ex) { FrameDLRObject dp = FrameDLRObject.CreateInstance(Base.Constants.FrameDLRFlags.SensitiveCase); foreach (var item in dbc) { if (item.Value.ParameterValue is DateTime) { dp.SetValue(item.Key, DateTimeStd.IsDateTimeThen(item.Value.ParameterValue, "yyyy-MM-dd HH:mm:ss")); } else if (item.Value.ParameterValue is DBNull) { dp.SetValue(item.Key, null); } else { dp.SetValue(item.Key, item.Value.ParameterValue); } } GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, $"QuerySql={sql};\nParameters={dp.ToJSONString()}"); throw ex; } if (rtn.QueryDatas != null && rtn.QueryDatas.Tables.Count > 0) { rtn.QueryTable = rtn.QueryDatas[0]; } } return(rtn); }
public static DataCollection Call <T>(ParameterStd p) where T : IUnit { T t = (T)Activator.CreateInstance(typeof(T), true); return(t.DoOperate(p)); }
public void ProcessException(object sender, Exception ex, ParameterStd p, DataCollection d) { GlobalCommon.Logger.WriteLog(Base.Constants.LoggerLevel.ERROR, ex.Message); }