public override IMessage Invoke(IMessage msg) { #region 日志准备 List <string> opObjPerporty = UtilitysForT <SSY_LOGENTITY> .GetAllColumns(new SSY_LOGENTITY()); //要操作的属性名 List <string> opWherePerporty = new List <string>(); //where条件属性名 opWherePerporty.Add("LOGID"); List <string> mainProperty = new List <string>(); //主键属性名 mainProperty.Add("LOGID"); //string errStr = string.Empty; List <string> errStr = new List <string>(); List <SSY_LOGENTITY> opList = new List <SSY_LOGENTITY>(); SSY_LOGENTITY logenti = null; BizExectuteCommon recordLog = new BizExectuteCommon(ManagerSysEnvironment.GetSysEnvironmentSerialize()); //其他工厂记录日志也利用该公共方法 //日志固定部分 string USERNAMES = string.Empty; if (FrameCommon.SysEnvironment.SysUserDict != null) { if (FrameCommon.SysEnvironment.SysUserDict.USERNAME != null) { USERNAMES = FrameCommon.SysEnvironment.SysUserDict.USERNAME.ToString(); } } string IPS = string.Empty; if (!string.IsNullOrEmpty(FrameCommon.SysEnvironment.Ips)) { IPS = FrameCommon.SysEnvironment.Ips; } string SYSTEMNAME = string.Empty; if (!string.IsNullOrEmpty(FrameCommon.SysEnvironment.distManagerParam.DistributeDataNodes[0].Systemname)) { SYSTEMNAME = FrameCommon.SysEnvironment.distManagerParam.DistributeDataNodes[0].Systemname; } #endregion IMethodCallMessage mcall = (IMethodCallMessage)msg; //劫持方法,准备执行 var resResult = new ReturnMessage(new Exception(), mcall); #region 获取必要参数 //distributeActionIden 分布式动作识别, 必须存在 //distributeDataNodes 分布式数据节点集合, 必须存在 //distributeDataNode 分布式数据节点参数, 必须存在 //distriActionSql 分布式操作sql集合,必须存在,包括sql正文和参数 //ddnmParams //singleActionList 单点操作失败集合, out参数 非必须存在,传入空的参数即可 //TODO 检查必须的参数,若不存在不进行执行业务方法,返回执行异常 //获取分布式管理参数 DistributeDataNodeManagerParams distManagerParam = new DistributeDataNodeManagerParams(); for (int i = 0; i < mcall.InArgs.Length; i++) { if (mcall.GetInArgName(i).ToUpper() == "ddnmParams".ToUpper()) { distManagerParam = ((DistributeDataNodeManagerParams)mcall.GetInArg(i)); //SYSTEMNAME = distManagerParam.DistributeDataNodes[0].Systemname; break; } } //获取分布式动作识别参数 DistributeActionIden distBAC = distManagerParam.DistributeActionIden; //加载数据节点集合,然后根据节点数量及分布式动作识别初始化分布式数据节点及分布式事务处理 //数据节点集合由服务方法传入 //获取数据节点集合参数 List <SSY_DATANODE_ADDR> dataNodes = distManagerParam.DistributeDataNodes; //获取数据节点参数 DistributeDataNode ddn = distManagerParam.DistributeDataNode; //单点操作失败集合,最后要报告给节点中心,out参数 bool permitSingleDataOperation = false; //是否支持单点操作失败后进行报告 List <SSY_DATA_ACTION_TASK> data_action_task = new List <SSY_DATA_ACTION_TASK>(); for (int i = 0; i < mcall.InArgs.Length; i++) { if (mcall.GetInArgName(i).ToUpper() == "singleActionList".ToUpper()) { permitSingleDataOperation = true; data_action_task = mcall.GetInArg(i) as List <SSY_DATA_ACTION_TASK>; break; } } #endregion if (distBAC == DistributeActionIden.Query) { //处理数据节点 //distManagerParam.DistributeDataNode distManagerParam.DistributeDataNode.Connectionstring = string.Format(dataNodes[0].Data_conn, dataNodes[0].Url_addr, dataNodes[0].Data_user, dataNodes[0].Data_password); distManagerParam.DistributeDataNode.DbSchema = dataNodes[0].Data_schema; //只执行一次即可 #region 执行业务方法 try { object objRv = mcall.MethodBase.Invoke(this.Target, mcall.Args); #region 记录业务日志 //执行方法后记录正常业务日志,内容来自方法ListBizLog参数 //若要记录日志,要求该方法必须传入该参数,且名字必须为ListBizLog,内容为要记录的业务日志内容 SSY_LOGENTITY tempLog = null; for (int i = 0; i < mcall.InArgs.Length; i++) { if (mcall.GetInArgName(i).ToUpper() == "ListBizLog".ToUpper()) { List <SSY_LOGENTITY> dictBizLog = mcall.GetInArg(i) as List <SSY_LOGENTITY>; for (int j = 0; j < dictBizLog.Count; j++) { //遍历记录业务日志 tempLog = dictBizLog[j] as SSY_LOGENTITY; //获取日志控制,确定是否记录该类日志 if (recordLog.CheckIsRecord(tempLog.DOMAINNAME.ToString(), tempLog.OPTIONNAME.ToString(), distManagerParam)) { tempLog.LOGID = recordLog.GetID(MakeIDType.YMDHMS_3, string.Empty, null, distManagerParam); //业务直接使用业务端提交的数据,不在读取框架环境变量,因为登录时这部分数据滞后,导致不能记入日志 //tempLog.USERNAMES = USERNAMES; //tempLog.IPS = IPS; //tempLog.SYSTEMNAME = SYSTEMNAME; opList.Add(tempLog); } } if (opList.Count > 0) { //记录日志 bool flag = recordLog.OpBizObjectSingle <SSY_LOGENTITY>(opList, opObjPerporty, opWherePerporty, mainProperty, errStr, distManagerParam); } break; } } #endregion resResult = new ReturnMessage(objRv, mcall.Args, mcall.Args.Length, mcall.LogicalCallContext, mcall); } catch (Exception ex) { Common.Utility.RecordLog("工厂 Query 模式发生异常!原因" + ex.Message + ex.Source, this.logpathForDebug, this.isLogpathForDebug); #region 记录异常日志 if (ex.InnerException != null) { //获取日志控制,确定是否记录该类日志 if (recordLog.CheckIsRecord("ExceptionErr", "ExceptionErr", distManagerParam)) { //处理异常类相关信息 string CLASSNAME = mcall.TypeName; string METHORDNAME = mcall.MethodName; //异常时这部分可没有内容 string TABLENAME = ""; string RECORDIDENCOLS = ""; string RECORDIDENCOLSVALUES = ""; string FUNCTIONNAME = ""; logenti = LogCommon.CreateLogDataEnt(LogTypeDomain.ExceptionErr, LogLevelOption.ExecptionErr, recordLog.GetSystemDateTime(distManagerParam), CLASSNAME, METHORDNAME, LogAction.ExecptionErr, TABLENAME, RECORDIDENCOLS, RECORDIDENCOLSVALUES, USERNAMES, IPS, FUNCTIONNAME, ex.InnerException.Message, SYSTEMNAME, ""); logenti.LOGID = recordLog.GetID(MakeIDType.YMDHMS_3, string.Empty, null, distManagerParam); opList.Add(logenti); if (opList.Count > 0) { //记录日志 bool flag = recordLog.OpBizObjectSingle <SSY_LOGENTITY>(opList, opObjPerporty, opWherePerporty, mainProperty, errStr, distManagerParam); } } resResult = new ReturnMessage(ex.InnerException, mcall); } #endregion resResult = new ReturnMessage(ex, mcall); } #endregion } else if (distBAC == DistributeActionIden.SingleAction) { //数据节点有几个执行几次,单次提交,发现执行异常,将异常报告给节点中心,继续执行,直到完毕 for (int m = 0; m < dataNodes.Count; m++) { //ddn.DbFactoryName 数据库工厂取配置文件,目前不考虑同构不同种类的数据库 distManagerParam.DistributeDataNode.Connectionstring = string.Format(dataNodes[m].Data_conn, dataNodes[m].Url_addr, dataNodes[m].Data_user, dataNodes[m].Data_password); distManagerParam.DistributeDataNode.DbSchema = dataNodes[m].Data_schema; #region 执行业务方法 try { object objRv = mcall.MethodBase.Invoke(this.Target, mcall.Args); #region 记录业务日志 //执行方法后记录正常业务日志,内容来自方法ListBizLog参数 //若要记录日志,要求该方法必须传入该参数,且名字必须为ListBizLog,内容为要记录的业务日志内容 SSY_LOGENTITY tempLog = null; for (int i = 0; i < mcall.InArgs.Length; i++) { if (mcall.GetInArgName(i).ToUpper() == "ListBizLog".ToUpper()) { List <SSY_LOGENTITY> dictBizLog = mcall.GetInArg(i) as List <SSY_LOGENTITY>; for (int j = 0; j < dictBizLog.Count; j++) { //遍历记录业务日志 tempLog = dictBizLog[j] as SSY_LOGENTITY; //获取日志控制,确定是否记录该类日志 if (recordLog.CheckIsRecord(tempLog.DOMAINNAME.ToString(), tempLog.OPTIONNAME.ToString(), distManagerParam)) { tempLog.LOGID = recordLog.GetID(MakeIDType.YMDHMS_3, string.Empty, null, distManagerParam); //业务直接使用业务端提交的数据,不在读取框架环境变量,因为登录时这部分数据滞后,导致不能记入日志 //tempLog.USERNAMES = USERNAMES; //tempLog.IPS = IPS; //tempLog.SYSTEMNAME = SYSTEMNAME; opList.Add(tempLog); } } if (opList.Count > 0) { //记录日志 bool flag = recordLog.OpBizObjectSingle <SSY_LOGENTITY>(opList, opObjPerporty, opWherePerporty, mainProperty, errStr, distManagerParam); } break; } } #endregion resResult = new ReturnMessage(objRv, mcall.Args, mcall.Args.Length, mcall.LogicalCallContext, mcall); } catch (Exception ex) { SSY_DATA_ACTION_TASK tempDataTask = null; #region 记录异常日志 if (ex.InnerException != null) { //获取日志控制,确定是否记录该类日志 if (recordLog.CheckIsRecord("ExceptionErr", "ExceptionErr", distManagerParam)) { //处理异常类相关信息 string CLASSNAME = mcall.TypeName; string METHORDNAME = mcall.MethodName; //异常时这部分可没有内容 string TABLENAME = ""; string RECORDIDENCOLS = ""; string RECORDIDENCOLSVALUES = ""; string FUNCTIONNAME = ""; logenti = LogCommon.CreateLogDataEnt(LogTypeDomain.ExceptionErr, LogLevelOption.ExecptionErr, recordLog.GetSystemDateTime(distManagerParam), CLASSNAME, METHORDNAME, LogAction.ExecptionErr, TABLENAME, RECORDIDENCOLS, RECORDIDENCOLSVALUES, USERNAMES, IPS, FUNCTIONNAME, ex.InnerException.Message, SYSTEMNAME, ""); logenti.LOGID = recordLog.GetID(MakeIDType.YMDHMS_3, string.Empty, null, distManagerParam); opList.Add(logenti); if (opList.Count > 0) { //记录日志 bool flag = recordLog.OpBizObjectSingle <SSY_LOGENTITY>(opList, opObjPerporty, opWherePerporty, mainProperty, errStr, distManagerParam); } } if (permitSingleDataOperation) { #region 获取失败操作sql //获取失败记录,以便将任务报告给节点中心 //获取操作sql List<DistActionSql> DistriActionSqlParams for (int task = 0; task < distManagerParam.DistriActionSqlParams.Count; task++) { tempDataTask = new SSY_DATA_ACTION_TASK(); tempDataTask.Action_sql = distManagerParam.DistriActionSqlParams[task].ActionSqlText; string tempSqlParamSeq = string.Empty; bool temddddd = JsonSerializer.Serialize(distManagerParam.DistriActionSqlParams[task].ActionSqlTextParams, out tempSqlParamSeq); //保存sql参数序列化结果 tempDataTask.Action_sql_params = tempSqlParamSeq; tempDataTask.Data_real_conn = ddn.Connectionstring; data_action_task.Add(tempDataTask); } //执行完毕后,清除本次的sql记录 distManagerParam.DistriActionSqlParams.Clear(); //TODO 报告单点异常给节点中心,暂时不支持,后续扩展 #endregion } } #endregion continue; //继续执行 } #endregion } } else if (distBAC == DistributeActionIden.TransAction) { try { //分布式事务执行, 按数据节点数量执行,同步提交 using (var ts = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, TimeSpan.FromHours(1))) { for (int m = 0; m < dataNodes.Count; m++) { //ddn.DbFactoryName 数据库工厂取配置文件,目前不考虑同构不同种类的数据库 distManagerParam.DistributeDataNode.Connectionstring = string.Format(dataNodes[m].Data_conn, dataNodes[m].Url_addr, dataNodes[m].Data_user, dataNodes[m].Data_password); distManagerParam.DistributeDataNode.DbSchema = dataNodes[m].Data_schema; #region 执行业务方法 object objRv = mcall.MethodBase.Invoke(this.Target, mcall.Args); #region 记录业务日志 //执行方法后记录正常业务日志,内容来自方法ListBizLog参数 //若要记录日志,要求该方法必须传入该参数,且名字必须为ListBizLog,内容为要记录的业务日志内容 SSY_LOGENTITY tempLog = null; for (int i = 0; i < mcall.InArgs.Length; i++) { if (mcall.GetInArgName(i).ToUpper() == "ListBizLog".ToUpper()) { List <SSY_LOGENTITY> dictBizLog = mcall.GetInArg(i) as List <SSY_LOGENTITY>; for (int j = 0; j < dictBizLog.Count; j++) { //遍历记录业务日志 tempLog = dictBizLog[j] as SSY_LOGENTITY; //获取日志控制,确定是否记录该类日志 if (recordLog.CheckIsRecord(tempLog.DOMAINNAME.ToString(), tempLog.OPTIONNAME.ToString(), distManagerParam)) { tempLog.LOGID = recordLog.GetID(MakeIDType.YMDHMS_3, string.Empty, null, distManagerParam); //业务直接使用业务端提交的数据,不在读取框架环境变量,因为登录时这部分数据滞后,导致不能记入日志 //tempLog.USERNAMES = USERNAMES; //tempLog.IPS = IPS; //tempLog.SYSTEMNAME = SYSTEMNAME; opList.Add(tempLog); } } //这里事物不能同时记录日志,需要放到业务方法提交完成后单独记录日志 if (opList.Count > 0) { //记录日志 bool flag = recordLog.OpBizObjectSingle <SSY_LOGENTITY>(opList, opObjPerporty, opWherePerporty, mainProperty, errStr, distManagerParam); } break; } } #endregion resResult = new ReturnMessage(objRv, mcall.Args, mcall.Args.Length, mcall.LogicalCallContext, mcall); #endregion } ts.Complete(); ts.Dispose(); } //同时记录日志,因为日志记录去掉事物方式 ////恢复事物默认标识 //distManagerParam.DistributeActionIden = DistributeActionIden.Query; ////启用事物日志需要独立记录,不能和业务操作混在一个事物里 //for (int m = 0; m < dataNodes.Count; m++) //{ // //ddn.DbFactoryName 数据库工厂取配置文件,目前不考虑同构不同种类的数据库 // distManagerParam.DistributeDataNode.Connectionstring = string.Format(dataNodes[m].Data_conn, dataNodes[m].Url_addr, dataNodes[m].Data_user, // dataNodes[m].Data_password); // distManagerParam.DistributeDataNode.DbSchema = dataNodes[m].Data_schema; // if (opList.Count > 0) // { // //记录日志 // bool flag = recordLog.OpBizObjectSingle<SSY_LOGENTITY>(opList, opObjPerporty, opWherePerporty, mainProperty, errStr, distManagerParam); // } //} } catch (Exception ex) { Common.Utility.RecordLog("工厂 TransAction 模式发生异常!原因" + ex.Message + ex.Source, this.logpathForDebug, this.isLogpathForDebug); } } //最终返回结果,循环处理数据节点时,只返回最后一个执行成功的数据节点的执行情况 return(resResult); }
public string currlang = APPConfig.GetAPPConfig().GetConfigValue("currlang", ""); //默认语种 public CommonBaseService() { //支持CROSS访问 if (OperationContext.Current != null) { //wcf通道不存在跨域问题 } if (WebOperationContext.Current != null) { #region 跨域访问 if (WebOperationContext.Current.IncomingRequest.Method == "OPTIONS") { if (WebOperationContext.Current.OutgoingResponse.Headers["Access-Control-Allow-Methods"] == null) { WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*"); WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Origin, Cache-Control, X-Requested-With, Content-Type, Accept, token"); WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Max-Age", "1728000"); } } else { if (WebOperationContext.Current.OutgoingResponse.Headers["Access-Control-Allow-Methods"] == null) { WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*"); WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE"); WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type"); } } #endregion } if (HttpContext.Current != null) { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, Cache-Control, X-Requested-With, Content-Type, Accept, token"); HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); HttpContext.Current.Response.End(); } } envirObj = new SysEnvironmentSerialize(); try { //获取框架环境 string token = this.GetToken(); if (!string.IsNullOrEmpty(token)) { //bool temps = JsonSerializer.Deserialize<SysEnvironmentSerialize>(Encoding.Default.GetString(Convert.FromBase64String(token)), out envirObj); //TODO 后续考虑js的base64处理 envirObj = json.Deserialize <SysEnvironmentSerialize>(token); } else { envirObj.I18nCurrLang = currlang; } //赋值框架实例到静态框架环境 ManagerSysEnvironment.GetSysEnvironmentSerialize2SysEnvironment(envirObj); //这里装载框架级语言包,具体模块在模块内装载 DataTable comlangtmp = (DataTable)currCache.Get("i18nCommonCurrLang"); if (comlangtmp != null) { if (currlang == envirObj.I18nCurrLang) { i18nCommonCurrLang = comlangtmp; } else { string commoni18nLangPath = string.Format(APPConfig.GetAPPConfig().GetConfigValue("Commoni18nLang", ""), envirObj.I18nCurrLang); i18nCommonCurrLang = this.GetI18nLang(commoni18nLangPath); } } else { string commoni18nLangPath = string.Format(APPConfig.GetAPPConfig().GetConfigValue("Commoni18nLang", ""), envirObj.I18nCurrLang); i18nCommonCurrLang = this.GetI18nLang(commoni18nLangPath); } //装载服务配置 //serviceConfig = this.GetServiceConfig(APPConfig.GetAPPConfig().GetConfigValue("ServiceConfigPath", "")); DataTable dttmp = (DataTable)currCache.Get("serviceConfig"); if (dttmp != null) { serviceConfig = dttmp; } else { serviceConfig = this.GetServiceConfig(APPConfig.GetAPPConfig().GetConfigValue("ServiceConfigPath", "")); } //装载数据配置 //distManagerParam = this.GetDistributeDataNodeManagerParams(); DistributeDataNodeManagerParams ddnmtmp = (DistributeDataNodeManagerParams)currCache.Get("dataNodes"); if (ddnmtmp != null) { distManagerParam = ddnmtmp; } //这里不需要再装载了,缓存已经装载了 //else //{ // distManagerParam = this.GetDistributeDataNodeManagerParams(); //} //设置语言运行环境 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(envirObj.I18nCurrLang); Thread.CurrentThread.CurrentUICulture = new CultureInfo(envirObj.I18nCurrLang); //due to an error of freetextbox, all the cultures must use a dot as NumberDecimalSeparator Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; this.successStr = this.GetI18nLangItem("successStr", this.i18nCommonCurrLang); this.errorStr = this.GetI18nLangItem("errorStr", this.i18nCommonCurrLang); } catch (Exception ex) { throw new Exception("Unknown exception! Reason:" + ex.Message); } }
/// <summary> /// 获取用户信息 /// </summary> /// <param name="model"></param> /// <returns></returns>d public string GetUserForLoginN(string req) { try { //解析参数实体 reqdata = this.AnaRequestData(req); SSY_USER_DICT model = this.json.Deserialize <SSY_USER_DICT>(reqdata.reqdata); StringBuilder toolStr = new StringBuilder(); //准备日志参数实例 List <SSY_LOGENTITY> ListBizLog = new List <SSY_LOGENTITY>(); if (model.USERID.ToString().ToUpper() == "super".ToUpper()) { base.envirObj.distManagerParam.DistributeActionIden = DistributeActionIden.Query; } else { base.envirObj.distManagerParam.DistributeActionIden = DistributeActionIden.TransAction; } //this.permitMaxLoginFailtCnt = APPConfig.GetAPPConfig().GetConfigValue("permitMaxLoginFailtCnt", "5"); //允许最大错误登录次数, 默认5次 //解密口令, 客户端已经加密,这里无需解密,直接比较密码串 //string iv128str = APPConfig.GetAPPConfig().GetConfigValue("ivpwd", "5CRc851hRywf7W3m"); //string key256str = APPConfig.GetAPPConfig().GetConfigValue("keypwd", "nW8FnftasWp7AVZrmgr9sdaGNXsjMWiw"); //byte[] key256 = Security.CreateKeyByte(key256str); //byte[] iv128 = Security.CreateKeyByte(iv128str); //model.PASSWORD = Security.DeAES(model.PASSWORD.ToString(), key256, iv128); List <SSY_USER_DICT> uds = this._comBiz.GetUserForLogin(model, base.envirObj.distManagerParam, ListBizLog); if (uds.Count > 0) { if (model.PASSWORD.ToString() == uds[0].PASSWORD.ToString()) { if (uds[0].ISUSE.ToString() == "0") { //判断是否禁用 resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginerr_Enabled", this.i18nModuleCurrLang), string.Empty, string.Empty); } else if (uds[0].LOCKED.ToString() == "1") { //判断是否锁定 resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginerr_Locked", this.i18nModuleCurrLang), string.Empty, string.Empty); } else { #region 允许登录后,正常验证处理 //判断是否登录 bool alreadyLonin = false; if (Utility.ObjHasData(uds[0].ISLONIN) && Utility.ObjHasData(uds[0].FROMPLAT)) { if (uds[0].ISLONIN == "Y" && uds[0].FROMPLAT.ToUpper() == base.envirObj.distManagerParam.DistributeDataNodes[0].Systemname.ToUpper()) { alreadyLonin = true; } } if (alreadyLonin) { //检查密码安全补存提示信息 //resdata = BaseWebPage.MakeResponseData("0", string.Format(BaseUI.GetNoticeCfg("com0008", "CommonNoticeCfg"), uds[0].FROMPLAT.ToUpper()), string.Empty); resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginok_exist", this.i18nModuleCurrLang), string.Empty, string.Empty); } else { //检查是否启用密码安全策略 检查首次登陆 检查超过时间间隔 if (base.envirObj.distManagerParam.DistributeDataNodes[0].Isusepwdsecuritycheck == "Y") { if (base.envirObj.distManagerParam.DistributeDataNodes[0].Pwdfirstcheck == "Y" && uds[0].ISFIRSTLOGIN == "Y") { //首次登陆提示 toolStr.AppendLine(this.GetI18nLangItem("loginok_firstlogin", this.i18nModuleCurrLang)); } //这里取服务器时间即可 //Frame.ServiceLibs.FrameManagerService tmpop = new FrameManagerService(); //string currTime = string.Empty; //currTime = tmpop.GetSystemDateTimesN(string.Empty); string currTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if ((!string.IsNullOrEmpty(currTime)) && (!string.IsNullOrEmpty(uds[0].LASTLOGINTIME.ToString()))) { TimeSpan ts = Convert.ToDateTime(currTime) - Convert.ToDateTime(uds[0].LASTLOGINTIME.ToString()); if (ts.TotalHours >= int.Parse(base.envirObj.distManagerParam.DistributeDataNodes[0].Pwdintervalhours)) { //超过时间提示 toolStr.AppendLine(string.Format(this.GetI18nLangItem("loginok_oversecuritytime", this.i18nModuleCurrLang), base.envirObj.distManagerParam.DistributeDataNodes[0].Pwdintervalhours)); } } } #region 获取令牌 //节点中心安全服务 //string FrameNodeSecurity = APPConfig.GetAPPConfig().GetConfigValue("NodeCenterMaster", "") + // APPConfig.GetAPPConfig().GetConfigValue(SSY_ServiceHost.FrameNodeSecurityService, "").TrimStart('/'); //调用普通节点中心服务获取令牌 DataRow drServ = this.GetServiceConfigOne("framenodesecu", "1.0", "normal", "frameNode", this.serviceConfig); //string FrameNodeSecurity = base.envirObj.BizNodeAddr + "/" + drServ["servcodename"].ToString().TrimStart('/'); string FrameNodeSecurity = drServ["url_addr"].ToString().TrimStart('/') + "/" + drServ["servcodename"].ToString().TrimStart('/'); SSY_DYNAMICTOKEN tokenModel = new SSY_DYNAMICTOKEN(); tokenModel.Dynamictoken = ""; tokenModel.ID = ""; tokenModel.Remarks = model.USERID.ToString(); //暂存用户账户,用于节点中心获取令牌时重新验证 tokenModel.Timestampss = model.PASSWORD.ToString(); //暂存用户口令,用于节点中心获取令牌时重新验证 this.reqdata = new ReqData(); this.reqdata.reqdata = json.Serialize(tokenModel); //动态调用服务获取令牌 string tokenstr = DynamicInvokeWCF.Create <IFrameNodeSecurity>(FrameNodeSecurity).GetToken(this.json.Serialize(this.reqdata)); //返回执行结果 if (string.IsNullOrEmpty(tokenstr)) { resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginok_notoken", this.i18nModuleCurrLang), string.Empty, string.Empty); } else { //解析令牌 RespData tmpToken = json.Deserialize <RespData>(tokenstr); if (tmpToken.respflag == "1") { //赋值当前登录用户数据 base.envirObj.SysUserDict = uds[0]; RespData tmpresdata = json.Deserialize <RespData>(tokenstr); //直接返回环境参数,去除口令和数据节点 base.envirObj.TokenEncrpValue = tmpresdata.respdata; SysEnvironmentSerialize resTmp = new SysEnvironmentSerialize(); resTmp = json.Deserialize <SysEnvironmentSerialize>(json.Serialize(base.envirObj)); resTmp.SysUserDict.PASSWORD = ""; //不返回密码 resTmp.distManagerParam = null; //不返回数据节点 //赋值用户数据到框架环境变量 ManagerSysEnvironment.GetSysEnvironmentSerialize2SysEnvironment(base.envirObj); if (string.IsNullOrEmpty(toolStr.ToString())) { resdata = this.MakeResponseData("1", this.GetI18nLangItem("loginok", this.i18nModuleCurrLang), json.Serialize(resTmp), string.Empty); } else { resdata = this.MakeResponseData("2", this.GetI18nLangItem("loginok", this.i18nModuleCurrLang), json.Serialize(resTmp), string.Empty); } } else { resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginok_gettokenerr", this.i18nModuleCurrLang), string.Empty, string.Empty); } } #endregion } #endregion } } else { resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginerr_userNotPassword", this.i18nModuleCurrLang), string.Empty, string.Empty); } } else { resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginerr_nocurruser", this.i18nModuleCurrLang), string.Empty, string.Empty); } } catch (Exception ex) { resdata = this.MakeResponseData("0", this.GetI18nLangItem("loginerr_findexception", this.i18nModuleCurrLang) + ex.Message, string.Empty, string.Empty); } return(json.Serialize(resdata)); }