?? enginemanager.cs
字號(hào):
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發(fā)送對(duì)象
UDPSend send;
//引擎日志
private ArrayList engineLog = new ArrayList();
public EngineManager(WorkflowRuntime Engine)
{
if (Engine == null)
{ throw new System.Exception("引擎對(duì)象沒有實(shí)例化"); }
WFEngine = Engine;
eventBind();
}
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
/// <param name="Engine">引擎</param>
/// <param name="udpobj">UDP對(duì)象</param>
public EngineManager(WorkflowRuntime Engine, UDPSend udpobj)
{
if (udpobj == null || Engine ==null)
{ throw new System.Exception("UDP對(duì)象或引擎對(duì)象沒有實(shí)例化"); }
engineLog.Add("UDP服務(wù)已加載");
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出現(xiàn)錯(cuò)誤:" + 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>
/// 引擎中是否存在指定實(shí)例
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public bool IsExistInstance(string guid)
{
bool b=GetInstanceList().Contains(guid);
return b;
}
/// <summary>
/// 得到工作流實(shí)例
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public WorkflowInstance GetInstance(string guid)
{
if (!WFEngine.IsStarted)
{
this.engineLog.Add("在引擎暫停時(shí)讀取" + 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},發(fā)生{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},發(fā)生{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},發(fā)生{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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -