1、1 说明
以下方法不要求宿主引用类,但是,如果xoml中使用了自定义的Activity,要将自定义的Activity所在的dll文件复制到宿主程序目录中
可以将其转换成另一种xoml文件,具体见[编译成DLL的工作流的XOML文件]
2 VS2005设计器生成的xoml文件
注意
该文件不能用于直接创选实例,也不能用于动态编译
如果要使用,可参考下面的方法要求修改
x:Class
与
xmlns:ns0="clr-namespa
3、ce
部分
3 从xoml文件创建工作流实例
只有加载由[从工作流类得到xoml字串]格式的xoml文件,即
没有x:Class部分
要有xmlns:ns0="clr-namespace部分有Assembly与Version与Culture与PublicKeyToken信息
Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
可以使用
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom("WorkflowLibrary1.dll");
Sy
5、stem.Console.WriteLine(a.FullName);
得到
方法
///
/// 从xoml文件创建工作流实例
///
/// xomlfile文件
/// 实例guid或错误信息
public string CreateWorkflowFromXomlFile(string xomlfile)
{
6、 try
{
System.Workflow.Runtime.WorkflowInstance instance;
XmlReader xr = XmlReader.Create(xomlfile);
instance = WFEngine.CreateWorkflow(xr);
return instance.InstanceId.ToString();
7、 }
catch (System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException ex)
{
return "err:" + ex.Message;
}
}
4 从xoml字串创建工作流实例
只有加载由[从工作流类得到xoml字串]格式的xoml文件,即
没有x:Class部分
要有xmlns:ns0="clr-namespace部分有Assembly与Ve
8、rsion与Culture与PublicKeyToken信息
9、
Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
可以使用
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom("WorkflowLibrary1.dll");
System.Console.WriteLine(a.FullName);
得到
方法
///
/// 从xoml字串创建工作流实例
/// 10、mmary>
/// xoml字符串
/// 实例guid或错误信息
public string CreateWorkflowFormXomlString(string xomlstring)
{
try
{
System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();
11、
byte[] b = utf8.GetBytes(xomlstring);
System.IO.MemoryStream ms = new System.IO.MemoryStream(b);
XmlReader xr = XmlReader.Create(ms);
System.Workflow.Runtime.WorkflowInstance instance;
instance = WFEngine.CreateWorkflow(xr);
return instance.InstanceId.ToString();
}
catch (System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException ex)
{
return "err:" + ex.Message;
}
}
5