在aspnet中使用wwf的第一个实践
在winfx的主页上看到了aspnet form做wwf宿主的例子,由于本人刚刚删除了vs2005的bate2版以及wwf,装上了vs2005的professional,呵呵,只好按照提示,前装上了winfx的sdk,然后装上了Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 1.2,运行了vs2005,发现了wwf的工程模板,只是与bate1有些变化,看来还是在不断进步中。
先是在本机上的sql server 2005建了runtime使用的三个数据库:workflowpersistence,workflowtimer,workflowtracking,然后在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Windows Workflow Foundation\SQL(你自己的系统目录下)执行了所有的sql命令,先schema,后logic,呵呵。只是没空好好研究这几个家伙。
按网上例子的思路,开始了这个例子的实践:
建一个顺序工作流库的工程,我将其命名为mywebwwf,在workflow1中加入一个code活动,在code的executecode属性中写上“code_Excute”,在workflow1的代码中,定义一个字符串变量results,并在code_Excute方法中写下如下代码:
this.results = string.Format("你好 {0} {1}", this.Parameters["FirstName"].Value.ToString(), this.Parameters["LastName"].Value.ToString());
在workflow1的属性parameters中加入三个参数,其中FirstName与LastName为输入型string, Results为输出型string,其值(value)为变量results;
编译一下,形成dll文件。
在解决方案中加入一个新的web form项目,将其设为起动项目,然后加入mywebwwf.dll的引用。
可以开始写入网页代码了,先在网页窗体上加上两个textbox,当然可以加上相应的label做标题。
然后加上一个button做命令,
下面加上一个label做输出,并将其命名为:lblResults
在代码中还要加上事件:
WorkflowRuntime_WorkflowCompleted
下面是default.aspx的代码部份:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting.Web;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void button1_Click(object sender, EventArgs e)
{
this.StartWorkflow();
}
private void StartWorkflow()
{
// Define the parametes for the
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("FirstName", this.TextBox1.Text);
parameters.Add("LastName", this.TextBox2.Text);
// Get a reference to the Workflow Runtime through the WorkflowWebHostingModule
// Http Module.
//
// NOTE: This requires the configuration section to be named "WorkflowRuntime".
WorkflowRuntime workflowRuntime = WorkflowRequestContext.Current.WorkflowRuntime;
// Attach to the WorkflowCompleted event
workflowRuntime.WorkflowCompleted +=
new EventHandler<WorkflowCompletedEventArgs>(WorkflowRuntime_WorkflowCompleted);
// Start the Workflow1
WorkflowInstance workflowInstance = workflowRuntime.StartWorkflow(
typeof(mywebwwf.Workflow1), parameters);
}
void WorkflowRuntime_WorkflowCompleted(object sender, System.Workflow.Runtime.WorkflowCompletedEventArgs e)
{
this.lblResults.Text = e.OutputParameters["Results"].ToString();
}
}
运行一下,成功了,是不是很简单。