为了使CallExternalMethod活动工作,我们需要在工作流Runtime中添加一个ExternalDataExchangeService,然后再向ExternalDataExchangeService中添加一个本地服务BugFlowService
2007-09-20 11:41
393 查看
《WF编程》系列之28 - 本地通信事件:CallExternalMethodActivity
4.2 本地通信事件
让工作流和外部世界进行交互也并不是什么难事,因为WF本身就内置了一些活动来完成这样的工作.这一节我们来讨论一下可以和宿主进程提供的本地服务进行通信的活动们
为了能让本地通信可以工作,我们需要以.NET接口的形式定义一个合同.在这个接口中会包含一些方法和事件,工作流可以通过这些方法来调用本地服务,而本地服务则可以触发这些会被工作流处理的事件.
还是关于bug跟踪的例子.有时候我们需要更详细的描述一个bug,比如一张截图.工作流可以向宿主索取这种额外需要的文档.也许宿主会自动上传文档,但实际上更多的情形是,宿主会提醒一个用户:”Hi,您需要提供bug的更详细信息!”.接着,工作流会等待图片被上传(或许几秒钟,或许几天).图片上传完毕后,宿主可以通过一个事件来通知工作流.下面的接口定义了一个服务合同. ExternalDataExchange特性将接口标识为本地通信服务,而且凭借这个标识,Runtime还会将这个接口识别为服务合同.
[ExternalDataExchange]
interface IBugService
{
bool RequestUpload(Guid id, string userName);
event EventHandler UploadCompleted;
}
接下来介绍可以和这个接口交互的两个活动: CallExternalMethod和HandleExternalEvent.
4.2.1 CallExternalMethodActivity
CallExternalMethod活动可以调用本地服务上的方法.我们需要做的仅仅是设置这个活动的属性:首先应该设置的是InterfaceType属性,设计器会通过我们设置的接口来自动发现服务中所有可用的方法.一旦我们把InterfaceType设置为之前定义的接口,我们就可以为MethodName属性选择需要调用的方法.设计器还会在属性面板中列出该方法需要的参数.我们可以将这些输入参数和方法的返回值绑定到工作流的域或属性.譬如图中的_newBug就是工作流的一个域.
为了使CallExternalMethod活动工作,我们需要在工作流Runtime中添加一个ExternalDataExchangeService,然后再向ExternalDataExchangeService中添加一个本地服务BugFlowService(BugFlowService类实现了IBugService接口).
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
ExternalDataExchangeService dataService = new ExternalDataExchangeService();
workflowRuntime.AddService(dataService);
BugFlowService bugService = new BugFlowService();
dataService.AddService(bugService);
CallExternalMethod活动包含一个MethodInvoking事件,这个事件会在活动调用外部方法之前触发,我们可以利用这个事件来动态的操作这些参数:
private void callExternalMethodActivity1_MethodInvoking(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(_newBug.NewBug.Description))
{
_newBug.NewBug.Description = " 这家伙太懒了,什么都没留下.";
}
}
相关文章推荐
- 电报加密 描述: 发送电报保密是一项重要的工作,尤其是在军事领域,所以,为了安全的需要常常会对发送的内容进行加密,然后,接收方再进行解密,这样就达到了安全的需要。 本次我们完成一个简单的对字母加密程
- 现在为了让程序兼容vista,我们需要给程序加上一个manifest文件,可是有时候vc6它就会弹出Resource Compiler Error RC2170 的错误,可能是vc6一个bug,我个人对vc6还是很喜欢的,不过经常会有编译死掉或出错的问题,
- andorid 一个与activity有数据交互的本地服务(了解service就看这一篇就可以)
- 别再为了iOS新系统设备而重新安装一个新版Xcode了.其实我们可以添加版本支持
- Git 分支 - 分支的新建与合并 分支的新建与合并 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创
- 广播和服务之重点: 长期运行的服务: 在子线程工作的本地服务实现————IntentService
- android 源码中添加一个最简单的自启动的本地服务
- 电影《教父》中的老大哥都觉得:一个不花时间陪家人的男人算不得一个好男人。繁花似锦,岁月青葱,人生不过25亿秒,过一秒,少一秒,时间正滴答滴答地蚕食我们,我们唯一需要做的,就是让这些秒钟过得有意思:高效工作,不断的学习充实,陪陪家人联络亲友,爱惜身体养养花草。
- IE本地存储userdata的一个bug说明
- android 自动划屏效果 在这里,我们需要用到google提到的一个包——android-support-v4.jar,这个包是为了方便实现android view之间的切换,关
- ArcGIS For JavaScript API 添加一个dynamic Service(动态服务)————(一)
- 《WF编程》系列之34 - 基本活动:状态活动 到目前为止,我们所讨论的工作流都是顺序工作流,而WF还支持另外一种工作流机制-状态机(State-Machine)工作流,本节就来介绍这些在状态机工作流中工作的活动.
- 安卓开发,一个Activity启动了一个本地服务,然后把Activity切换到后台,那这是后台进程还是次要服务进程
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- DynamicDataExchange(DDE)机制引发的卡死有一个bug
- 在服务 ObtainData 实现的协定列表中找不到协定名称 "IMetadataExchange"。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost,以启用对该协定的支持。
- 关于Spring中初始化一个静态变量(需要调用Service层然后从数据库查出来的)
- 《WF编程》系列之28 - 本地通信事件:CallExternalMethodActivity
- 自动同步北京时间,需要启动jboss服务,然后运行127.0.0.1:8080即可,共两个jsp文件,一个获取时间,一个设置时间
- IE本地存储userdata的一个bug?