Esempio n. 1
0
 public Instructions()
 {
     instructions["ST"]   = new ST();
     instructions["LD"]   = new LD();
     instructions["ADD"]  = new ADD();
     instructions["SUB"]  = new SUB();
     instructions["JMP"]  = new JMP();
     instructions["JN"]   = new JN();
     instructions["JP"]   = new JP();
     instructions["JZ"]   = new JZ();
     instructions["JNZ"]  = new JNZ();
     instructions["HALT"] = new HALT();
     //Second architecture functions.
     instructions["LD2"] = new LD2();
     instructions["LD3"] = new LD3();
     instructions["ST2"] = new ST2();
     instructions["ST3"] = new ST3();
     instructions["POS"] = new POS();
     instructions["PXL"] = new PXL();
     instructions["RND"] = new RND();
     instructions["CLR"] = new CLR();
     instructions["COS"] = new COS();
     instructions["SIN"] = new SIN();
     instructions["IN"]  = new IN();
 }
Esempio n. 2
0
File: LogUtil.cs Progetto: vebin/soa
 /// <summary>
 /// 增加审计日志
 /// </summary>
 public static String AddAuditLog(int status
     , BindingTemplate binding
     , DateTime reqBeginTime
     , DateTime reqEndTime
     , DateTime callBeginTime
     , DateTime callEndTime
     , String message
     , JN.ESB.Schemas.服务请求 request)
 {
     return AddAuditLog(status, binding.TemplateID.ToString(), binding.ServiceID.ToString(), binding.Address.ToString()
      , reqBeginTime, reqEndTime, callBeginTime, callEndTime
      , message, request);
 }
        /// <summary>
        /// Get the row number for the first instance of a job number
        /// </summary>
        /// <param name="jobNumber"></param>
        /// <returns></returns>
        public int GetJobNumberRow(string jobNumber)
        {
            int i = 0;

            foreach (string JN in ReturnJobNumbers())
            {
                if (JN.Equals(jobNumber))
                {
                    return(i);
                }
                i++;
            }
            return(i);
        }
Esempio n. 4
0
        public const String COMPANY_URL = "http://mb.com";//--公司网址,用于SOAP协议中的基地址

        /// <summary>
        /// 动态调用WebService主函数
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static JN.ESB.Schemas.服务响应 DynamicalCallWebService(
              Boolean needResponse
            , JN.ESB.Schemas.服务请求 request)
        {
            //--记录接收时间并放在请求结束时间中,用于判读ESB在接到请求到开始调用的耗时
            DateTime receiveDateTime = DateTime.Now;

            //--验证并预处理请求参数
            InvalidRequest(request);

            //--获取到请求对应服务的绑定
            EntityList<BindingTemplate> bindings = GetBindings(request);

            //--如果只有一个绑定,且需要返回结果
            if (bindings.Count == 1 && needResponse == true)
            {
                CallState state = new CallState()
                {
                    Binding = bindings[0],
                    Request = request,
                    RequestBeginTime = request.请求时间,
                    RequestEndTime = receiveDateTime
                };

                return CallService(state);
            }
            else //--如果有多个绑定则默认为发布、订阅模式,不需要将每个订阅则的结果都放回给调用方,或者指明是不需要放回结果的情况(单向调用)
            {
                foreach (BindingTemplate binding in bindings)
                {
                    CallState state = new CallState()
                    {
                        Binding = binding,
                        Request = request,
                        RequestBeginTime = request.请求时间,
                        RequestEndTime = receiveDateTime
                    };

                    ThreadPoolX.QueueUserWorkItem(() => CallService(state));
                }
                return GetMultiResponse();
            }
        }
Esempio n. 5
0
File: LogUtil.cs Progetto: vebin/soa
        /// <summary>
        /// 增加审计日志
        /// </summary>
        public static String AddAuditLog(int status
            , String bindingTemplateID
            , String serviceID
            , String address
            , DateTime reqBeginTime
            , DateTime reqEndTime
            , DateTime callBeginTime
            , DateTime callEndTime
            , String message
            , JN.ESB.Schemas.服务请求 request)
        {
            AuditBusiness log = new AuditBusiness()
            {
                OID = Guid.NewGuid().ToString(),
                HostName = request.主机名称,
                ServiceName = request.服务名称,
                MethodName = request.方法名称,
                ReqBeginTime = reqBeginTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                ReqEndTime = reqEndTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                Status = status,
                MessageID = Guid.NewGuid().ToString(),
                MessageBody = request.消息内容,
                CallBeginTime = callBeginTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                CallEndTime = callEndTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                BindingTemplateID = bindingTemplateID,
                ServiceID = serviceID,
                BindingAddress = address,
                ReturnMessageBody = message,
                BusinessName = "",
                BusinessID = ""
            };

            //log.Insert();

            MQUtil.SendMessage<AuditBusiness>(log, @"WIN-02UQME9JGZD\Private$\EsbAuditQueue");

            return log.MessageID;
        }
Esempio n. 6
0
        /// <summary>
        /// 验证并预处理请求参数
        /// </summary>
        /// <param name="request"></param>
        private static void InvalidRequest(JN.ESB.Schemas.服务请求 request)
        {
            if (String.IsNullOrEmpty(request.主机名称))
            {
                throw LogUtil.ExceptionAndLog("主机名称必须填写!", "", request);
            }

            if (String.IsNullOrEmpty(request.服务名称))
            {
                throw LogUtil.ExceptionAndLog("服务名称必须填写!", "", request);
            }
            
            if (String.IsNullOrEmpty(request.方法名称))
            {
                EntityList<BindingTemplate> bindings = GetBindings(request);
                if(bindings == null)
                    throw LogUtil.ExceptionAndLog("方法名称必须填写!", "", request);
                else
                    throw LogUtil.ExceptionAndLog("方法名称必须填写!", "", bindings[0], request);
            }

            //--如果用户没有传递请求时间,或则传入时间无效,则默认为当前时间
            if (request.请求时间.Year != DateTime.Now.Year)
                request.请求时间 = DateTime.Now;


            if (String.IsNullOrEmpty(request.消息内容))
                request.消息内容 = String.Empty;

            if (String.IsNullOrEmpty(request.密码))
                request.密码 = String.Empty;
        }
Esempio n. 7
0
        /// <summary>
        /// 根据服务请求获取到对应的URL绑定信息
        /// </summary>
        /// <param name="serviceName"></param>
        /// <returns></returns>
        private static EntityList<BindingTemplate> GetBindings(JN.ESB.Schemas.服务请求 request)
        {
            String serviceName = request.服务名称;
            BusinessService service = BusinessService.FindByServiceName(serviceName);

            if (service == null)
                throw LogUtil.ExceptionAndLog(String.Format("服务【{0}】尚未注册!", serviceName), "", request);


            //--查找某个服务下所有启用状态的绑定
            EntityList<BindingTemplate> bings = BindingTemplate.FindAllByServiceID(service.ServiceID);
            if (bings == null || bings.Count == 0)
            {
                throw LogUtil.ExceptionAndLog(String.Format("服务【{0}】尚未绑定任何路由地址!", serviceName), "", request);
            }

            return bings;
        }
Esempio n. 8
0
File: LogUtil.cs Progetto: vebin/soa
        /// <summary>
        /// 抛出异常并写日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="binding"></param>
        /// <param name="request"></param>
        public static Exception ExceptionAndLog(String exceptionDesc, String message, BindingTemplate binding, JN.ESB.Schemas.服务请求 request)
        {
            CallState state = new CallState()
            {
                RequestBeginTime = DateTime.Now,
                RequestEndTime = DateTime.Now,
                CallBeginTime = DateTime.Now,
                CallEndTime = DateTime.Now
            };

            return ExceptionAndLog(state, exceptionDesc, message, binding, request);
        }
Esempio n. 9
0
File: LogUtil.cs Progetto: vebin/soa
 /// <summary>
 /// 抛出异常并写日志
 /// </summary>
 /// <param name="message"></param>
 /// <param name="binding"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 public static Exception ExceptionAndLog(String exceptionDesc, String message, JN.ESB.Schemas.服务请求 request)
 {
     return ExceptionAndLog(exceptionDesc, message, null, request);
 }
Esempio n. 10
0
File: LogUtil.cs Progetto: vebin/soa
        /// <summary>
        /// 抛出异常并写日志, 并需要记录异常的时间
        /// </summary>
        /// <param name="message"></param>
        /// <param name="binding"></param>
        /// <param name="request"></param>
        public static Exception ExceptionAndLog(CallState state, String exceptionDesc, String message, BindingTemplate binding, JN.ESB.Schemas.服务请求 request)
        {
            String messageID = String.Empty;
            String exceptionMessage = String.Format("{0}:{1}", exceptionDesc, message);


            if (state.CallBeginTime.Year != DateTime.Now.Year) state.CallBeginTime = DateTime.Now;
            if (state.CallEndTime.Year != DateTime.Now.Year) state.CallEndTime = DateTime.Now;

            if (binding != null)
                messageID = AddAuditLog(0, binding, state.RequestBeginTime, state.RequestEndTime, state.CallBeginTime, state.CallEndTime
                    , exceptionMessage, request);
            else
                messageID = AddAuditLog(0, "00000000-0000-0000-0000-000000000000"
                    , String.Empty, string.Empty, state.RequestBeginTime, state.RequestEndTime, state.CallBeginTime, state.CallEndTime
                    , exceptionMessage, request);


            ExceptionCoreTb exception = new ExceptionCoreTb()
            {
                ExceptionID = Guid.NewGuid(),
                BindingTemplateID = binding == null ? Guid.Empty : binding.TemplateID,
                BindingType = 0,
                Description = exceptionDesc,
                ExceptionCode = String.Empty,
                ExceptionInfo = exceptionMessage,
                ExceptionLevel = 0,
                ExceptionStatus = 0,
                ExceptionTime = DateTime.Now,
                ExceptionType = 0,
                HostName = request.主机名称,
                MessageBody = request.消息内容,
                MessageID = new Guid(messageID),
                MethodName = request.方法名称,
                RequestPwd = request.密码,
                RequestType = 0
            };
            exception.Insert();

            return new Exception(message);
        }
Esempio n. 11
0
 /// <summary>
 /// 将请求消息转换成目标服务的输入参数
 /// </summary>
 /// <param name="asm"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 private static Object GetRequest(SoapClientItem soapClient, JN.ESB.Schemas.服务请求 request)
 {
     object target = null;
     try
     {
         target = soapClient.CreateRequestObject();
         if (target != null)
         {
             soapClient.SetReqObjProperty(target, "主机名称", request.主机名称);
             soapClient.SetReqObjProperty(target, "服务名称", request.服务名称);
             soapClient.SetReqObjProperty(target, "方法名称", request.方法名称);
             soapClient.SetReqObjProperty(target, "消息内容", request.消息内容);
             soapClient.SetReqObjProperty(target, "密码", request.密码);
             soapClient.SetReqObjProperty(target, "请求时间", request.请求时间);
         }
     }
     catch (Exception ex)
     {
         XTrace.WriteLine("构造请求参数失败:" + ex.Message);
     }
     return target;
 }