Windows Workflow Foundation(Windows 工作流基础,WF)是WCF 的补充技术。由WCF定义并实现一个服务的接口,WF负责对这个服务的商业逻辑进行模型化处理以及实现。Visual Studio 2008 和.NET 3.5 提供了二者更深层次的集成。
为了从WF调用服务,你可以使用一个发送活动,代码活动或者一个自定义活动。发送活动要求至少有代码但是一个自定义活动是目前为止最具可扩展性的选项。
接收活动在WF设计器中用来将一个工作流以服务形式暴露出来。在它配置好以后,WF为这个服务定义一个[ServiceContract]同时为每个接收活动定义一个[OperationContract](这个意思是说WCF 的服务还是以前的服务,但是WCF服务中的操作变成了WF的接收活动)。你可以通过导入的代理指定接收活动或者直接将其添加到工程中,或者你可以使用一个WF设计器定义接口。接收活动绑定WF变量到服务操作上。使用WF设计器,你可以选择或者创建WF范围内的变量来绑定到这个操作中的每个输入变量。
WF类,WorkflowServiceHost,用来实例化WF运行时。这个类用来为服务开启的工作流替代ServiceHost(在WCF中,使用ServiceHost寄宿服务,而在WF中,使用WorkflowServiceHost 寄宿服务).这个类必须在自我寄宿时使用。当在IIS中寄宿时,必须在SVC文件中确定一个工厂类来实现同样的结果。
当暴露一个服务开启工作流时必须使用上下文绑定中的一个: basicHttpContextBinding, wsHttpContextBinding或者netTcpContextBinding.这些绑定使用上下文信道元素,它们向信道中添加上下文信息。你也可以把这个信道元素添加到自定义信道中。已有的工作流的相关入列消息要求上下文信息。
很多对商业过程建模的工作流程序必须运行数天,数周或者数月,在这个期间客户端可能掉线,服务可能被回收,或者网络也挂了。为了支持这些过程的长时间运行特性。一个持续性服务是必须的。当一个工作流实例空闲时,或者当运行时关闭时,持续性服务保存状态,或者将其”脱水”到持久性存储设备上。当WF从一个脱水的实例接收一条消息时,WF将其从持续性服务中”加水”恢复。
注: 关于“脱水”和“加水” 可以联想木耳,湿木耳晒干后可以长期存储,等到要吃的时候,再用水泡开,这样干木耳又恢复到之前的样子了。