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

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);


    }

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






分享到:
评论

相关推荐

    Professional ASP.NET 3.5 SP1 Edition: In C# and VB

    《Professional ASP.NET 3.5 SP1 Edition: In C# and VB》是一本专为开发者设计的专业级编程书籍,深入探讨了ASP.NET 3.5 SP1(Service Pack 1)框架,涵盖了C#和VB两种编程语言的应用。这本书不仅适合初学者,也对...

    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 ...

    [ASP.NET.3.5高级程序设计(第2版)].Pro.ASP.NET.3.5.in.C#.2008.2th.edtion.pdf

    ASP.NET 3.5集成了Windows Workflow Foundation(WF),使得开发人员可以在Web应用中轻松实现工作流逻辑。此外,WCF(Windows Communication Foundation)是Microsoft提供的一套用于创建服务通信的应用程序框架,它...

    Sams Teach Yourself ASP.Net in 24 Hours - CODE

    《Sams Teach Yourself ASP.NET in 24 Hours》是一本著名的ASP.NET入门教程,通过24个小时的学习,读者可以掌握构建动态Web应用程序的基础知识。本书涵盖了从基础概念到高级特性的广泛内容,旨在帮助初学者快速上手...

    Apress - Pro ASP.NET 3.5 in C# 2008, 2nd Edition (SourceCode)

    《精通ASP.NET 3.5(C# 2008版)》是针对ASP.NET 3.5框架和C#编程语言的一本深入指南,旨在帮助开发者掌握这一强大的Web开发平台。本书提供了丰富的源码示例,以及英文样章,以辅助读者理解和实践ASP.NET 3.5的关键...

    Windows Workflow in .NET 4 PDF和代码

    3. **工作流宿主**:理解如何在ASP.NET、WCF服务或独立应用程序中托管工作流。 4. **持久化与恢复**:了解WF如何保存和恢复工作流实例状态,以支持长期运行的流程。 5. **规则和决策**:学习如何使用规则引擎来实现...

    .NET FrameWork 3.5(包含.Net2.0,.Net3.0).zip

    而ASP.NET MVC框架则提供了一种模型驱动的Web开发方式,使得代码结构更加清晰,有利于测试驱动开发。 在Windows Server 2012 R2操作系统中,.NET Framework 3.5可能默认未启用,安装SQL Server 2005时可能需要这个...

    pro wf windows workflow in dot net 3.5

    5. **宿主环境**:讨论了如何在不同环境中(如ASP.NET、Windows服务、桌面应用等)宿主和使用WF工作流,以及如何自定义宿主环境以满足特定需求。 6. **设计时体验**:涵盖了使用Visual Studio 2008的设计工具来创建...

    Microsoft.NET4.0.rar

    6. **ASP.NET MVC 3**:虽然压缩包中没有明确提及,但.NET 4.0的发布伴随着ASP.NET MVC 3的推出,为Web应用开发带来了更多功能和灵活性。 总的来说,"Microsoft.NET4.0.rar"包含了运行和开发基于.NET Framework 4.0...

    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...

    .Net framwwork 4.0

    在Asp.net方面,.NET Framework 4.0引入了ASP.NET MVC(Model-View-Controller)框架,这是一种设计模式,有助于实现更清晰的代码结构和更好的测试性。此外,ASP.NET Dynamic Data框架简化了数据库驱动的应用程序...

    Microsoft.NET.4.0..rar

    7. **MVC(Model-View-Controller)**:.NET Framework 4包含了ASP.NET MVC框架,这是一种用于构建可维护性和测试性更强的Web应用程序的设计模式。 8. **ADO.NET Entity Framework**:数据库访问框架也进行了升级,...

    .net code

    在"压缩包子文件的文件名称列表"中提到了"All-In-One Code Framework",这可能是一个集合多种示例代码和解决方案的框架,它为开发者提供了大量可复用的代码片段,涵盖了各种.NET技术,比如ASP.NET MVC、WPF、WF、WCF...

    .Net 3.0 Books Pic

    7. **beginning-asp-net-3-5-in-c-sharp-2008-from-novice-to-professional-second-edition.jpg**:ASP.NET 3.5是.NET Framework 3.0的扩展,这本书可能覆盖了从入门到精通ASP.NET 3.5和C# 2008的全过程。...

    .net 官方部分源代码 

    5. **ASP.NET**: ASP.NET是用于构建Web应用程序的技术,包括HTTP处理,视图渲染,路由,依赖注入等。通过查看源码,开发者可以更好地理解MVC模式在.NET中的实现,以及如何优化Web应用性能。 6. **ADO.NET**: ADO...

    Microsoft.NET.zip

    7. **ASP.NET**:是.NET Framework的一部分,用于开发Web应用程序,提供了多种模式(MVC、Web Forms、Web API等)来构建Web应用。 8. **.NET Core**:作为.NET Framework的现代替代品,.NET Core是跨平台的,支持...

    Introducing_WF_in_NET_Framework_35_v1

    4. **宿主环境**:应用程序可以作为WF的宿主,如ASP.NET、Windows服务或自定义宿主。 5. **规则引擎**:支持条件和决策逻辑的表达,可以通过声明式规则来控制流程。 **USING WINDOWS WORKFLOW FOUNDATION** 开发...

Global site tag (gtag.js) - Google Analytics