WF提供了一组核心服务,例如在SQL 数据库中存储工作流实例的执行详细信息的持久性服务,计划服务,事务服务和跟踪服务。除了这些WF也提供了另外一种服务,叫做Local Service也可以叫做Data exchange service。主要是实现工作流和宿主程序之间的通信,使工作流能够使用方法和事件通过消息与外部系统交互。 事件用于将数据发送到工作流,而工作流使用方法将数据发送到主机应用程序。 通过事件与工作流进行通信的功能提供了一种将数据发送到工作流的异步方式。本文主要讲述调用外部方法的部分。
下图说明本地通信服务如何与其主机应用程序通信:

下面首先说说如何开发一个本地服务:
1.使用C#的接口定义服务契约,在接口中定义你方法和事件。并使用[ExternalDataExchangeAttribute]装饰该接口,用于说明这是一个本地服务的接口。
2.开发一个实现了该接口的类,用于实现你的逻辑。
3.创建一个工作流实例,并将该本地服务添加到工作流引擎中去。
我们开发一个简单的本地服务的例子,根据AccountID来修改Balance的值,并使用三种方式来调用:
1.定义一个Account类,代码如下(Account.cs)
using System;
namespace CaryWorkflows
{
[Serializable]
public class Account
{
private Int32 _id;
private String _name = String.Empty;
private Double _balance;
public Int32 Id
{
get { return _id; }
set { _id = value; }
}
public String Name
get { return _name; }
set { _name = value; }
public Double Balance
get { return _balance; }
set { _balance = value; }
}
}
2.定义一个接口,需要ExternalDataExchange属性,代码如下(IAccountServices.cs):
3.实现该接口,代码如下():
2.我们只要需改动宿主程序中如下部分:
本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/05/09/CallExternalMethod.html,如需转载请自行联系原作者