SharePoint Workflow架构(一)宿主服务(HostService): SPWinOeHostService

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章。通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题。因此翻译过来,希望对Workflow的开发人员有帮助。

第一篇请查看:http://blog.csdn.net/spfarm/article/details/42464329

这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师。原文地址。这个关于Workflow的系列,是他贡献给社区的,帮助大家更好的理解Workflow运行时的内部机制,以及如何和SharePoint交互。

这篇文章由SPFarmer翻译。

宿主服务(HostService): SPWinOeHostService

在SharePoint里,Workflow宿主服务,TheWorkflow Host service是SPWinOeHostService这个类. 它做以下部分:

- 初始化System.Workflow.Runtime.WorkflowRuntime 对象.

- 嵌入 runtime services
到workflow runtime:

*持久化服务( Persistence Service)

*订阅服务(Subscription Service)

* 提交工作服务(CommitWorkBatch service)

-通过Communication Services
类和workflow实例通信:

* SPWinOETaskService

* SPWinOEWSSService

* 你的自定义的数据交换服务(data exchange service)基于SPWorkflowExternalDataExchangeService

- 处理WorkflowRuntime
事件,比如 WorkflowStarted,WorkflowStopped 等.

Workflow实例(Instance)

SharePoint 使用 SPWorkflow 对象来呈现Workflowruntime底层的workflowinstance. 
这个对象包含很多属性,例如workflowinstance ID (System.Workflow.Runtime.WorkflowInstance),相关联的SharePointWeb, List, ListItem,以及其他的相关的信息,比如
history list, task list等等。

运行时服务(RuntimeServices)

SPWinOePersistenceService

持久性(Durability)是WindowsWorkflow Foundation的一个关键的功能,
这个功能允许workflows在等待用户输入时,可以被从内存中卸载(unloaded),并被序列化(serialized)之后持久存储起来,比如存数到SQL数据库或者XML文件。而任何时候当接收到用户输入时,workflow
runtime 引擎加载(load) workflow
状态的信息到内存里,继续执行workflow.

当Workflow运行时候,如果特定的条件发生,Workflowruntime会使用持久化服务,来持久化Workflow实例的状态信息。这些条件包括:

- 当 TransactionScopeActivity activities和CompensatableTransactionScopeActivity activities里的自动传输完成的时候.

- 当workflow
实例空闲(idle),并且WorkflowPersistenceService的 UnloadOnIdle 标志位被设置成true的时候。例如当你使用DelayActivity activity的时候。

- 当runtime
的宿主应用程序对workflow实例调用 System.Workflow.Runtime.WorkflowInstance.Unload orSystem.Workflow.Runtime.WorkflowInstance.TryUnload 的时候

- 当一个workflow
实例被终结后者完成的时候.

- 当使用 PersistOnCloseAttribute 属性的自定的activity
完成的时候

如果一个条件符合了,persistence service
会被添加到runtime engine, the runtime engine
调用persistence service提供的方法,来保存workflowinstance的状态信息. 类似的,当workflowruntime
engine 需要加载之前被持久化的Workflow,他调用persistenceservice提供的方法,从之前存储的介质里,加载workflow状态信息。换句话说,workflowruntime
engine 决定什么时候持久化应该发生,但是到等待persistenceservice
真正执行需要的持久化操作.

SharePoint 扩展了runtime Persistence Service,
被叫做 Dehyderation/Rehydration
进程. 这个服务由SPWinOePersistenceService 类定义,被
SPWinOeHostService嵌入到Workflow runtime里
.

SPWinOePersistenceService 的主要功能是持久化workflow实例到SharePoint内容数据库以及从内容数据库加载workflow. Workflow
runtime 自动决定 PersistencePoint 然后调用persistence
service 来卸载workflow实例。

下面的截图显示查询SharePoint内容数据库时候的结果. InstanceData 就是Workflow实例被序列化之后的数据,InstanceDataSize 是workflow
实例的大小。

select top 1 Id, InstanceData, InstanceDataSize from Workflow

SPWinOESubscriptionService

SPWinOESubscriptionService 继承自 WorkflowSubscriptionService. 开发人员可以使用订阅服务(subscriptionservice)来订阅workflow事件并且处理自定义逻辑,例如你在你的workflow里有一个OnTaskChangedactivity,当workflowruntime运行这activity时候,会调用 SPWinOESubscriptionService.CreateSubscription() 方法.运行时调用订阅服务来发送这个提醒,提醒有一个时间发生了,然后看是否需要做一些操作。

之前我们提到每个workflow task
都关联了一个event receiver
,我没有解释eventreceiver
是怎么来的,下面是答案:

SPWinOESubscriptionService 的目的是注册一个eventreceiver到每一个workflowtask上. Eventreceiver
负责处理Taskitem的 ItemUpdated 事件,把这个时间转化成一个workflowevent,并且传递给workflowruntime. 
当event到达workflowinstance时,OnTaskChanged activity
被调用了. 等OnTaskChanged activity运行完毕之后,workflow
runtime 调用SPWinOESubscriptionService.DeleteSubscription() 来从这个task上删除eventreceiver。

下面的表格列出了所有被SPWinOESubscriptionService处理的events:


Service


Event


ITaskService


OnTaskCreated;

OnTaskDeleted;

OnTaskChanged;


ISharePointService


OnWorkflowItemChanged;

OnWorkflowItemDeleted;


IListItemService


OnItemCreated;

OnItemChanged;

OnItemDeleted;

OnItemCheckedIn;

OnItemCheckedOut;

OnItemUncheckedOut;

OnItemAttachmentAdded;

OnItemAttachmentDeleted;

OnItemFileMoved;

让我们来举个例子,如果在你的workflow代码里,有两个activities,比如OnTaskChanged activity和OnTaskDeleted activity, SPWinOESubscriptionService 就会注册两个独立的eventreceivers
到这个task上,分别处理这个item的 ItemUpdated 和ItemDeleted events。

DefaultWorkflowCommitWorkBatchService

SharePoint 重用了WorkflowFoundation的 DefaultWorkflowCommitWorkBatchService. 这个service的作用是允许在提交workflow作业的时候(也被叫做持久化点),可以执行自定义逻辑. 当提交一个workflow作业的时候,workflow
runtime调用这个service,并且给他一个真实执行提交作业的代理。在SharePoint,所有对task做的更新,都使用这个service. 例如,CreateTask activity用来创建一个task,但是这个taskitem并不是在这个activity完毕之后,马上就被提交。这个activity仅仅是准备这个新task的属性,然后他发动WorkBatch service提交taskitem到数据库的代理. 这个也解释了,如果你尝试在CreateTask activity之后,马上在CodeActivity 里面使用task
item的实例,你会得到taskitem不存在的错误。

通信服务(CommunicationServices)

SharePoint 提供了一些开箱即用的communicationservice. 下面的表格解释了SharePoint里面使用的Service接口和类:


Service Interface


Service Class


ITaskService


SPWinOeTaskService实现了 ITaskService, 被用来处理task相关的 activities, 比如创建,删除task. 他同时响应task相关的事件,比如

task created, task updated.


IListItemService

ISharePointService


SPWinOeWSSService 实现了IListItemService 和ISharePointService.

他为workflow runtime提供处理item相关的操作的能力,并且响应这些事件。他还实现了ISharePointService, 可以用来发送邮寄,在History list里面打log等等。


IWorkflowModificationService


SPWinOeWSSService 也实现了 IWorkflowModificationService 接口,来实现处理workflow修改。

SPWorkflowManager

SPWorkflowManager是唯一的开发人员能和SharePointworkflow runtime交互的对象。这个对象最主要的功能包含:

1. 允许开发人员在自定义的应用程序里启动SharePointworkflow.

2. 和SharePoint workflow runtime (SPWinOeHostService)
交互,传送外部事件给workflow

在以后的博客里,我们会详细的讨论WorkflowEvent处理管道。.

·

时间: 2025-01-02 03:49:38

SharePoint Workflow架构(一)宿主服务(HostService): SPWinOeHostService的相关文章

SharePoint Workflow架构(二)Workflow 事件处理(Event Processing)

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章.通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题.因此翻译过来,希望对Workflow的开发人员有帮助. 这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师.原文地址.这个关于Workflow的系列,是他贡献给社区的,帮助大家更好的理解Workflow运行时的内部

SharePoint Workflow架构(二)Workflow 事件处理管道(Event Processing Pipeline)

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章.通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题.因此翻译过来,希望对Workflow的开发人员有帮助. 这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师.原文地址.这个关于Workflow的系列,是他贡献给社区的,帮助大家更好的理解Workflow运行时的内部

SharePoint Workflow架构(一)SharePoint 和Workflow Runtime的结合

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章.通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题.因此翻译过来,希望对Workflow的开发人员有帮助. 这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师.原文地址.这个关于Workflow的系列,是他贡献给社区的,帮助大家更好的理解Workflow运行时的内部

SharePoint Workflow Trouble Shooting(一)Task被锁住或者卡住

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章.通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题.因此翻译过来,希望对Workflow的开发人员有帮助.本部分主要讲trouble shooting. 这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师.原文地址.这个关于Workflow的系列,是他贡献给社区的,

SharePoint Workflow Trouble Shooting(二)分析log文件

[译者按]Andy Li这篇文章,是我看过的最好的,最透彻的关于SharePoint Workflow架构的文章.通过阅读他的文章,我才清楚的了解了SharePoint Workflow的运作机制,并且在遇到问题的时候,知道如何下手查找问题.因此翻译过来,希望对Workflow的开发人员有帮助.本部分主要讲trouble shooting. 这篇博客是由Andy Li贡献的,他是SharePoint开发人员支持组的处理疑难问题的工程师.原文地址.这个关于Workflow的系列,是他贡献给社区的,

部署基于国际版Azure的SharePoint三层架构服务器场

前言 微软Azure国际版已经很普及了,这里没有用国内版(世纪互联),用的是国际版,当然是由于公司性质的缘故.这里一步步图文的方式,分享给大家创建Azure国际版的SharePoint三层架构的过程,并带给大家一些使用感受. 自己在使用的过程中,也发现一些问题,搜了很久也没有搞定,最后在MS case的帮助下,才真正解决了问题.同时也分享给大家,对于已经深入了解Azure的朋友,可以忽略本文,烦请勿见笑. 1.申请Azure账号,这部分略过了,我这里已经有创建好的Azure账号,在管理页面上点击

Serverless 架构:用服务代替服务器

Serverless 架构:用服务代替服务器 转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需 加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:"加群 姓名 公司 职位 微信号 ". 还记得在十多年前,SaaS鼻祖SalesForce喊出的口号『No Software』吗?SalesForce在这个口号声中开创了SaaS行业,并成为当今市值520亿美元的SaaS之王.今天谈谈『No Server』有关的事, 继OpenStack.Do

单体架构还是微服务架构,这是个问题?

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 微服务架构现在越来越流行,那么是不是就意味着单体架构不再成为我们的选择了呢?个人认为这个要依情况而定. 现在谈及微服务架构的文章.演讲随处可见,似乎所有系统的架构都开始尽情拥抱微服务架构,包括笔者前久为一个异构电商平台系统设计的架构也选用了这种风格.然而,我们在选择微服务架构之前,一定要问一句"你现在面对的系统,微服务架构是一个好的选择吗?".当然,这个问题也是我这几天在思考的.

SharePoint 2013 Word 转换PDF服务介绍及示例

原文:SharePoint 2013 Word 转换PDF服务介绍及示例 前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有将Word文档转换PDF的服务了,用起来还是不错的. 下面,我们就来看看这个服务,如何将一个Word文档库批量转换成PDF文件,或者,将单一Word文档转换为PDF文档. 一.             效果展示 新建测试Wor