Beispiel #1
0
        string ProcessAndResult(FormBrowser form, string dataParam, ParamModel paramModel)
        {
            var resultModel = new ResultModel();

            resultModel.IsSuccess = true;
            resultModel.Result    = "666";
            try
            {
                //设置并执行相应操作,核心方法
                form.SetActionType(paramModel);

                try
                {
                    //得到执行结果
                    while (!CommonCla.IsTimeout(paramModel.StartTime, paramModel.Timeout))
                    {
                        resultModel.Result = form._result;
                        if (resultModel.Result == null)
                        {
                            if (MonitorStopProcess(paramModel.StopKey))
                            {
                                resultModel.Result = ArtificialCode.A_RequestNormalBreak.ToString();
                                break;
                            }

                            if (form.IsDisposed)
                            {
                                throw new Exception(ArtificialCode.A_RequestAccidentBreak.ToString());
                            }
                            Thread.Sleep(100);
                        }
                        else
                        {
                            resultModel.IsSuccess = true;
                            break;
                        }
                    }

                    if (resultModel.Result == null)
                    {
                        throw new Exception(ArtificialCode.A_TimeOutResult.ToString());
                    }
                }
                catch (Exception ex)//获取结果发生错误
                {
                    resultModel.Result = ex.Message;
                    //_log.ErrorFormat("耗时:{0}\r\n{1}\r\n{2}", CommonCla.GetMilliseconds(paramModel.StartTime), dataParam, resultModel.Result);
                }
            }
            catch (Exception ex)//解析参数发生错误
            {
                //如果Start发生异常
                form._isWorking = false;

                resultModel.Result = ex.Message;
                //_log.FatalFormat("{0}\r\nStart()\r\n{1}", paramModel.Method, ex.Message);
            }
            finally
            {
                Task.Run(() =>
                {
                    //本次执行完成,退出使用  //不阻塞执行,尽快返回结果
                    form.ProcessEnd();
                });
            }

            return(JsonConvert.SerializeObject(resultModel));
        }
Beispiel #2
0
        string Excute(string dataParam)
        {
            try
            {
                var paramModel = JsonConvert.DeserializeObject <ParamModel>(dataParam);
                ExcuteRecord(string.Format("请求接口:{0} 超时时间:{1}秒 使用窗口:{2}", paramModel.Method, paramModel.Timeout, paramModel.IsUseForm));

                //是否使用窗口
                if (paramModel.IsUseForm)
                {
                    lock (_objLock)
                    {
                        if (_excuteForm != null)
                        {
                            if (!_excuteForm.IsDisposed)
                            {
                                //如果还在执行则直接返回,这个很重要
                                if (_excuteForm._isWorking)
                                {
                                    return(JsonConvert.SerializeObject(new ResultModel()
                                    {
                                        IsSuccess = false,
                                        Result = ArtificialCode.A_ChangeProcess.ToString()
                                    }));
                                }
                                else
                                {
                                    _excuteForm._isWorking = true;
                                }
                            }
                            else
                            {
                                _excuteForm            = GetProcessForm();
                                _excuteForm._isWorking = true;
                            }
                        }
                        else
                        {
                            _excuteForm            = GetProcessForm();
                            _excuteForm._isWorking = true;
                        }
                    }

                    return(ProcessAndResult(_excuteForm, dataParam, paramModel));
                }
                else
                {
                    var process = ProcessFactory.GetProcessByMethod(paramModel);
                    return(JsonConvert.SerializeObject(new ResultModel()
                    {
                        IsSuccess = true,
                        Result = process.Excute(dataParam)
                    }));
                }
            }
            catch (Exception ex)
            {
                //_log.FatalFormat("Excute()\r\n{0}", ex.Message);
                return(JsonConvert.SerializeObject(new ResultModel()
                {
                    IsSuccess = false,
                    Result = ex.Message
                }));
            }
        }