在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();
    }
}
运行一下,成功了,是不是很简单。

posted @ 2006-01-03 12:31  不老仙翁  阅读(2216)  评论(3编辑  收藏  举报