`
maplye
  • 浏览: 112000 次
  • 来自: ...
社区版块
存档分类
最新评论

WF in Asp.Net

    博客分类:
  • .NET
阅读更多
这几天在研究Windows Workflow Foundation,天天上www.windowsworkflow.net 的论坛上查看和询问,全都是英文,头都看大了,对这金山词霸一个一个的啃。闲话少说,步入正题吧!

本篇主要讲WF在asp.net运用。如下:
我的流程设置如下:


设置了一个CodeActive和一个HandleExternalEventActive
CodeActive是执行一段代码的Active
HandleExternalEventActive是外联一个Event的Active

首先,配置web.config


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    
<configSections>
        
<section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    
</configSections>
    
<appSettings/>
    
<connectionStrings/>
    
<system.web>
        
<authentication mode="Windows"/>
        
<compilation debug="true">
            
<assemblies>
                
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                
<add assembly="System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                
<add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                
<add assembly="System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                
<add assembly="System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                
<add assembly="System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                
<add assembly="Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                
<add assembly="System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                
<add assembly="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                
<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                
<add assembly="Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                
<add assembly="Microsoft.Build.Framework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            
</assemblies>
        
</compilation>
    
</system.web>
  
  
<!--注册服务-->
    
<WorkflowRuntime Name="WorkflowServiceContainer">
        
<Services>
      
<add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      
<add type="System.Workflow.Activities.ExternalDataExchangeService, System.Workflow.Activities, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      
<add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" UnloadOnIdle="true" ConnectionString="Initial Catalog=PersistenceStore;Data Source=localhost;Integrated Security=SSPI;"/>
      
<add type="System.Workflow.Runtime.Tracking.SqlTrackingService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ConnectionString="Initial Catalog=TrackingStore;Data Source=localhost;Integrated Security=SSPI;"/>
    
</Services>
    
</WorkflowRuntime>

  
<!--设置追踪,会在网站根目录下出现WFTrace.log文件-->
  
<system.diagnostics>
    
<switches>
      
<add name="WorkflowTraceToDefault" value="1" />
      
<add name="Host" value="All" />
      
<add name="Runtime" value="All" />
      
<add name="Tracking" value="All" />
      
<add name="Activity" value="All" />
      
<add name="Rules" value="All" />
    
</switches>
    
<trace autoflush="true" indentsize="4">
      
<listeners>
        
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="WFTrace.log" />
      
</listeners>
    
</trace>
  
</system.diagnostics>
</configuration>

简单介绍上面的配置文件
a.注册服务
这里是将一些服务注册到 Workruntime中,你也可以在代码中使用AddServcie中注册服务。
注册好服务后,就可以在代码中
ExternalDataExchangeService dataService = workflowRuntime.GetService<ExternalDataExchangeService>();
以上方式得到服务。
b.跟踪
配置跟踪信息,非常有用,我有一次调试的时候,MSDTC 服务没有启动的错误,就是查看WFTrace.log文件而获得的。

然后,在Global中启动一个WorkRunTime
void Application_Start(object sender, EventArgs e)
    {
        System.Workflow.Runtime.WorkflowRuntime workflowRuntime = new System.Workflow.Runtime.WorkflowRuntime("WorkflowRuntime");
        Application["WorkflowRuntime"] = workflowRuntime;

        System.Workflow.ComponentModel.Compiler.TypeProvider typeProvider = new System.Workflow.ComponentModel.Compiler.TypeProvider(workflowRuntime);
        typeProvider.AddAssembly(typeof(WorkflowLibrary1.Workflow1).Assembly);
        workflowRuntime.AddService(typeProvider);

        workflowRuntime.StartRuntime();
    }

    void Application_End(object sender, EventArgs e)
    {
        System.Workflow.Runtime.WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime;
        workflowRuntime.StopRuntime();
    }

接着,就可以在程序中运行workflow了
private void StartWorkflow()
    {
        WorkflowRuntime workflowRuntime = StartRuntime();

        // Now get a refernece to the ManualWorkflowSchedulerService
        ManualWorkflowSchedulerService scheduler =
            workflowRuntime.GetService
<ManualWorkflowSchedulerService>();

        // Attach to the WorkflowCompleted event
        workflowRuntime.WorkflowCompleted += new EventHandler
<WorkflowCompletedEventArgs>(WorkflowRuntime_WorkflowCompleted);

        WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(WorkflowLibrary1.Workflow1));

        workflowInstance.Start();

        // Now run the workflow.  This is necessary when 
        // using the ManualWorkflowSchedulerService
        scheduler.RunWorkflow(workflowInstance.InstanceId);
    }




    private WorkflowRuntime StartRuntime()
    {
        WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;

        ExternalDataExchangeService dataService = workflowRuntime.GetService
<ExternalDataExchangeService>();
        OrderLocalServices.OrderService orderService = workflowRuntime.GetService
<OrderLocalServices.OrderService>();

        if (orderService == null)
        {
            orderService = new OrderLocalServices.OrderService();
            dataService.AddService(orderService);
        }

        // Attach to the WorkflowCompleted event
        workflowRuntime.WorkflowCompleted += new EventHandler
<WorkflowCompletedEventArgs>(WorkflowRuntime_WorkflowCompleted);
        return workflowRuntime;
    }

最后,运行代码后,当运行完上图中的CodeActive后,该workflowinstance将进入等待状态(会触发workflowRuntinme的WorkflowIdled事件)。
这个时候你如果注册了SqlWorkflowPersistenceService服务,和创建了PersistenceStore数据库,则会将此
工作流保存到数据库中,已备下次使用,关于这块下次我再整理。
为什么工作流会等待了,
因为接下来的环节HandleExternalEventActive的Active必须需要触发了和他相关联的事件后,他才会继续的。
所以,我可以针对workflowRuntinme增加WorkflowIdled事件,实现事件的代码如下:
   void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e)
    
{
        
        WorkflowRuntime workflowRuntime 
= Application["WorkflowRuntime"]  
        OrderService orderService 
= workflowRuntime.GetService<OrderService>();

        WorkflowInstance instance 
= workflowRuntime.GetLoadedWorkflows()[0];

        instance.Load();

        
//触发相关联的事件
        orderService.RaiseOrderUpdatedEvent(instance.InstanceId);


    }

这样这个工作流就整个的执行完成了。






分享到:
评论

相关推荐

    Pro WF Windows Workflow in .NET 3.5

    What you'll learn WF 4.0 basics New activities and changes to existing activities in WF 4.0 Customizing your workflows Accessing your workflows in a variety of ways in a variety of situations Using WF...

    Pro WF - Windows Workflow in .NET 4.pdf

    Customizing your workflows * Accessing your workflows in a variety of ways in a variety of situations * Using WF with Web Services and ASP.NET * Integrating WCF and WF Who this book is for This book ...

    Pro C# 2010 and the .NET 4 Platform(PDF清晰版)

    Find complete coverage of the WPF, WCF, and WF foundations that support the core .NET platform. Who is this book for? This book is for anyone with some software development experience who is ...

    C#与.NET3.5高级程序设计Code

    书中介绍了c#的各种语言构造、.net 2.0的类、核心api、公共中间语言(cil)、动态程序集和asp.net扩展等内容;同时也介绍了.net 3.0和.net 3.5中新的编程api,包括wpf 、wcf和wf 的功能;另外,还介绍了最新的c# 3.0...

    [Xceed] Xceed Ultimate Suite 2007 3.2.7559

    Includes all Xceed user interface, data manipulation and ASP.NET components. The only suite that offers both UI tools for application front-ends and data-handling libraries for application back-ends....

    Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition

    Discover all the new .NET 3.5 features nullable types, delegate covariance, ASP.NET 2.0 master pages, the new Windows Forms controls, and much more. Get a professional foothold targeted to ...

    [超全]C# 2010(C# 4.0)VS2010最新学习资料

    Pro ASP.NET 4 in C# 2010, Fourth Edition Illustrated C# 2010 Accelerated C# 2010 Visual Basic 2010 学习资源 Microsoft Visual Basic 2010 Step by Step Professional Visual Basic 2010 and .NET 4 ...

    Building State Machine Workflows with WF Hand-on Lab - PDF

    This is a step by step hand-on lab for WF from Microsoft Switzerland. In this Hands-On-Lab you will create a State Machine Workflow and integrate it in an existing ASP.NET Web Application.

    Building State Machine Workflows with WF Hand-on Lab - Source code

    This is a step by step hand-on lab for WF from Microsoft Switzerland. In this Hands-On-Lab you will create a State Machine Workflow and integrate it in an existing ASP.NET Web Application.

    WF4开发入门源代码

    Beginning_WF_Windows_Workflow_in_NET_4:源码

    professional visual studio 2008

    How to build web applications using ASP.NET AJAX, Silverlight, and ASP.NET MVC Ideas for building Office and Mobile applications, WPF, WCF, and WF projects Ways to effectively analyze and identify ...

Global site tag (gtag.js) - Google Analytics