⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enginemanager.cs

📁 基于微软WF开发的工作流全套实例源码
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Runtime.Tracking;
using System.Workflow.Runtime.Hosting;
using System.ComponentModel.Design;
using System.Xml;
using System.Reflection;
using System.Workflow.ComponentModel.Compiler;
using System.IO;
using System.CodeDom.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.ComponentModel.Design.Serialization;
using System.Collections;
using wxwinter.wf.UDPCommunication;
using System.Workflow.ComponentModel;

namespace wxwinter.wf.Service
{
	public class EngineManager : wxwinter.wf.Service.IEngineManager 
	{
        //引擎
        System.Workflow.Runtime.WorkflowRuntime WFEngine = null;
        
        //UDP发送对象
        UDPSend send;

        //引擎日志
        private ArrayList engineLog = new ArrayList();

 

        public EngineManager(WorkflowRuntime Engine)
        {
            if (Engine == null)
            { throw new System.Exception("引擎对象没有实例化"); }
            WFEngine = Engine;
            eventBind();
           
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="Engine">引擎</param>
        /// <param name="udpobj">UDP对象</param>
        public EngineManager(WorkflowRuntime Engine, UDPSend udpobj)
        {
            if (udpobj == null || Engine ==null)
            { throw new System.Exception("UDP对象或引擎对象没有实例化"); }
           
            engineLog.Add("UDP服务已加载");
           
            send = udpobj;
            WFEngine = Engine;
            
            eventBind();
        }
        /// <summary>
        /// 事件绑定
        /// </summary>
        void eventBind()
        {
            WFEngine.Started += new EventHandler<WorkflowRuntimeEventArgs>(WFEngine_Started);
            WFEngine.Stopped += new EventHandler<WorkflowRuntimeEventArgs>(WFEngine_Stopped);
            WFEngine.ServicesExceptionNotHandled += new EventHandler<ServicesExceptionNotHandledEventArgs>(WFEngine_ServicesExceptionNotHandled);
            WFEngine.WorkflowAborted += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowAborted);
            WFEngine.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(TestEngine_WorkflowCompleted);
            WFEngine.WorkflowCreated += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowCreated);
            WFEngine.WorkflowIdled += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowIdled);
            WFEngine.WorkflowLoaded += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowLoaded);
            WFEngine.WorkflowPersisted += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowPersisted);
            WFEngine.WorkflowResumed += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowResumed);
            WFEngine.WorkflowStarted += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowStarted);
            WFEngine.WorkflowSuspended += new EventHandler<WorkflowSuspendedEventArgs>(TestEngine_WorkflowSuspended);
            WFEngine.WorkflowTerminated += new EventHandler<WorkflowTerminatedEventArgs>(TestEngine_WorkflowTerminated);
            WFEngine.WorkflowUnloaded += new EventHandler<WorkflowEventArgs>(TestEngine_WorkflowUnloaded);

        }


        /// <summary>
        /// 得到日志列表
        /// </summary>
        /// <returns></returns>
        public ArrayList GetEngineLog()
        {
            return engineLog;
        }

        //工作流类到xoml字串
        string GetWorkflowClassXomlString(Activity wf)
        {
            WorkflowMarkupSerializer wfSerializer = new WorkflowMarkupSerializer();
            DesignerSerializationManager sm = new DesignerSerializationManager();
            sm.CreateSession();

            System.Text.StringBuilder s = new StringBuilder();
            XmlWriter xmlwriter = XmlWriter.Create(s);

            wfSerializer.Serialize(sm, xmlwriter, wf);
            if (sm.Errors.Count > 0)
            {
                engineLog.Add("GetWorkflowClassXomlString出现错误:" + sm.Errors.Count.ToString());
            }
            return s.ToString();
        }

        //工作流类到xoml字串
        public string GetWorkflowInstanceXomlString(string guid)
        {
     

            WorkflowInstance temp = GetInstance(guid);
            if (temp != null)
            {
                string s = GetWorkflowClassXomlString(temp.GetWorkflowDefinition());
                return s;
                
            }
            else
            {
                return "";
            }

            
        }

        /// <summary>
        /// 引擎中是否存在指定实例
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public bool IsExistInstance(string guid)
        {
          bool b=GetInstanceList().Contains(guid);
          return b;
        }
        /// <summary>
        /// 得到工作流实例
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public WorkflowInstance  GetInstance(string guid)
        {

            if (!WFEngine.IsStarted)
            {
                this.engineLog.Add("在引擎暂停时读取" + guid);
                return null;
            }
           if (IsExistInstance(guid))
            {      
              Guid gid = new Guid(guid);
              WorkflowInstance temp= WFEngine.GetWorkflow(gid);
              return temp;
            }

            else
            {
                return GetInstanceFormPersist(guid);
            }
        }

        WorkflowInstance GetInstanceFormPersist(string guid)
        {
            Guid gid = new Guid(guid);
            WorkflowInstance temp;
            try
            {
                temp = WFEngine.GetWorkflow(gid);
                temp.Load();
                return temp;
            }
            catch
            {
                return null;
            }
        }



        #region 事件绑定
        void WFEngine_Stopped(object sender, WorkflowRuntimeEventArgs e)
        {
            string s = string.Format("{0}引擎,在{1},发生{2}", WFEngine.Name, System.DateTime.Now.ToString(), "Stopped");
            this.engineLog.Add(s);
        }

        void WFEngine_Started(object sender, WorkflowRuntimeEventArgs e)
        {
            string s = string.Format("{0}引擎,在{1},发生{2}", WFEngine.Name, System.DateTime.Now.ToString(), "Started");

            this.engineLog.Add(s);
        }

        void WFEngine_ServicesExceptionNotHandled(object sender, ServicesExceptionNotHandledEventArgs e)
        {
            string s = string.Format("{0}引擎,在{1},发生{2}", WFEngine.Name, System.DateTime.Now.ToString(), "ServicesExceptionNotHandled" + e.Exception.Message);
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstanceId.ToString(), "ServicesExceptionNotHandled", System.DateTime.Now.ToString(),e.Exception.Message);
            sendMsg(v);
        }

        void TestEngine_WorkflowUnloaded(object sender, WorkflowEventArgs e)
        {
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowUnloaded", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e)
        {

            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowTerminated", System.DateTime.Now.ToString(), e.Exception.Message);
            sendMsg(v);
        }

        void TestEngine_WorkflowSuspended(object sender, WorkflowSuspendedEventArgs e)
        {

            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowSuspended", System.DateTime.Now.ToString(), e.Error);
            sendMsg(v);
        }

        void TestEngine_WorkflowStarted(object sender, WorkflowEventArgs e)
        {
            this.nStarteInstance++;
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowStarted", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowResumed(object sender, WorkflowEventArgs e)
        {

            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowResumed", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowPersisted(object sender, WorkflowEventArgs e)
        {
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowPersisted", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowLoaded(object sender, WorkflowEventArgs e)
        {
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowLoaded", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowIdled(object sender, WorkflowEventArgs e)
        {
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowIdled", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowCreated(object sender, WorkflowEventArgs e)
        {
            this.nCreateInstance++; 
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowCreated", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
        {
            this.nCompletedInstance++;
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowCompleted", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        void TestEngine_WorkflowAborted(object sender, WorkflowEventArgs e)
        {
            string v = string.Format("{0},{1},{2},{3}", e.WorkflowInstance.InstanceId.ToString(), "WorkflowAborted", System.DateTime.Now.ToString(), "-");
            sendMsg(v);
        }

        public void sendMsg(string v)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -