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,如需轉載請自行聯系原作者