一起谈.NET技术,WF4.0中如何实现XAML工作流的动态加载

简介:   我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧。  1. 创建自定义的Activityusing System;using System.Collections.

  我接下来还是用一个例子讲解一下如何在WF 4中动态加载xaml工作流的做法吧。

  1. 创建自定义的Activity

image

 
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;

namespace WorkflowConsoleApplication1
{

public sealed class MyActivity : CodeActivity
{
// Define an activity input argument of type string
public InArgument < string > Text { get ; set ; }

// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override void Execute(CodeActivityContext context)
{
// Obtain the runtime value of the Text input argument
string text = context.GetValue( this .Text);

Console.WriteLine(text);
}
}
}

  2.将这个自定义的Activity添加到流程中

image  设置它的Text属性:

image  3.将工作流的属性进行一些修改

image  注意,将BuildAction设置为Content,同时Copy to Output Directory 设置为Copy always,并且将Custom Tool设置为空白,完成操作之后,得到的xaml文件如下:

 
 
< Activity mc:Ignorable ="sap" x:Class ="WorkflowConsoleApplication1.Workflow1" sap:VirtualizedContainerService.HintSize ="240,240" mva:VisualBasic.Settings ="Assembly references and imported namespaces for internal implementation" xmlns ="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:local ="clr-namespace:WorkflowConsoleApplication1" xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv ="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva ="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s ="clr-namespace:System;assembly=mscorlib" xmlns:s1 ="clr-namespace:System;assembly=System" xmlns:s2 ="clr-namespace:System;assembly=System.Xml" xmlns:s3 ="clr-namespace:System;assembly=System.Core" xmlns:sad ="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap ="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg ="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1 ="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2 ="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3 ="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd ="clr-namespace:System.Data;assembly=System.Data" xmlns:sl ="clr-namespace:System.Linq;assembly=System.Core" xmlns:st ="clr-namespace:System.Text;assembly=mscorlib" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" >
< local:MyActivity sad:XamlDebuggerXmlReader.FileName ="D:\temp\WorkflowConsoleApplication1\WorkflowConsoleApplication1\Workflow1.xaml" sap:VirtualizedContainerService.HintSize ="200,200" Text ="Hello,World" />
</ Activity >

  4. 通过下面的代码创建并且运行流程

 
 
using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
using System.Activities.XamlIntegration;

namespace WorkflowConsoleApplication1
{
class Program
{
static void Main( string [] args)
{
WorkflowInvoker.Invoke(ActivityXamlServices.Load(
" workflow1.xaml " ));
}
}
}

  运行上述代码,我们会遇到一个错误。

image  这是为什么呢?MyActivity找不到?我们应该手工将xaml文件成下面这样。请注意粗体的部分,我添加了assembly的设置:

 
 
< Activity mc:Ignorable = " sap " x:Class = " WorkflowConsoleApplication1.Workflow1 " sap:VirtualizedContainerService.HintSize = " 240,240 " mva:VisualBasic.Settings = " Assembly references and imported namespaces for internal implementation " xmlns = " http://schemas.microsoft.com/netfx/2009/xaml/activities " xmlns:local = " clr-namespace:WorkflowConsoleApplication1;assembly=WorkflowConsoleApplication1 " xmlns:mc = " http://schemas.openxmlformats.org/markup-compatibility/2006 " xmlns:mv = " clr-namespace:Microsoft.VisualBasic;assembly=System " xmlns:mva = " clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities " xmlns:s = " clr-namespace:System;assembly=mscorlib " xmlns:s1 = " clr-namespace:System;assembly=System " xmlns:s2 = " clr-namespace:System;assembly=System.Xml " xmlns:s3 = " clr-namespace:System;assembly=System.Core " xmlns:sad = " clr-namespace:System.Activities.Debugger;assembly=System.Activities " xmlns:sap = " http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation " xmlns:scg = " clr-namespace:System.Collections.Generic;assembly=System " xmlns:scg1 = " clr-namespace:System.Collections.Generic;assembly=System.ServiceModel " xmlns:scg2 = " clr-namespace:System.Collections.Generic;assembly=System.Core " xmlns:scg3 = " clr-namespace:System.Collections.Generic;assembly=mscorlib " xmlns:sd = " clr-namespace:System.Data;assembly=System.Data " xmlns:sl = " clr-namespace:System.Linq;assembly=System.Core " xmlns:st = " clr-namespace:System.Text;assembly=mscorlib " xmlns:x = " http://schemas.microsoft.com/winfx/2006/xaml " >
< local:MyActivity sad:XamlDebuggerXmlReader.FileName = " D:\temp\WorkflowConsoleApplication1\WorkflowConsoleApplication1\Workflow1.xaml " sap:VirtualizedContainerService.HintSize = " 200,200 " Text = " Hello,World " />
</ Activity >

image  我个人认为这应该算是一个bug。但目前的情况就是这样,如果你的自定义Activity是在当前应用程序里面,则也是需要设置Assembly的信息的。当然,如果自定义Activity是单独的Assembly,则应该默认就会写上Assembly信息,那种情况反而是没有问题的。

目录
相关文章
|
23天前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
50 4
|
23天前
|
人工智能 物联网 开发者
.NET技术在现代软件开发中的应用愈发广泛和深入
.NET技术是软件开发的关键支柱,本文分为三部分探讨其创新应用:最新进展如.NET 5/6统一平台、性能提升、跨平台支持增强、云集成优化及开源社区贡献;应用场景涵盖微服务架构、物联网、AI/机器学习、游戏及移动应用开发;未来发展潜力在于持续性能优化、云原生支持、新兴技术集成、生态扩张及教育培训加强。.NET正以其强大适应性和创新潜力引领软件开发的新方向。
26 3
|
1天前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
31 12
|
10天前
|
大数据 开发工具 开发者
从零到英雄:.NET核心技术带你踏上编程之旅,构建首个应用,开启你的数字世界探险!
【8月更文挑战第28天】本文带领读者从零开始,使用强大的.NET平台搭建首个控制台应用。无论你是新手还是希望扩展技能的开发者,都能通过本文逐步掌握.NET的核心技术。从环境搭建到创建项目,再到编写和运行代码,详细步骤助你轻松上手。通过计算两数之和的小项目,你不仅能快速入门,还能为未来开发更复杂的应用奠定基础。希望本文为你的.NET学习之旅开启新篇章!
22 1
|
7天前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
16 0
|
23天前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
29 0
|
23天前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
27天前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
76 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
141 0
|
4月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
63 0
下一篇
DDNS