按照MSN上说的,在asp.net 中使用wf,推荐使用ManualWorkflowSchedulerService,使得工作流和宿主同步执行。但是我在使用中发现,如果使用了ManualWorkflowSchedulerService,我在流程中设置的CallExternalMethod等都无法执行,然后我使用了默认的SchedulerService,按理说是异步执行的,反而运行正常了,然后我打印了宿主线程和WF的线程id,发现默认SchedulerService时,线程id是相同的,这是怎么回事啊?哪位高手能解释一下。以下是我的流程定义和相关代码<StateMachineWorkflowActivity x:Class="StateDemo.Workflow1" InitialStateName="InitialState" CompletedStateName="Endstate" x:Name="Workflow1" DynamicUpdateCondition="{x:Null}" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
<StateActivity x:Name="InitialState">
<EventDrivenActivity x:Name="eventDriven">
<HandleExternalEventActivity EventName="Sumit" InterfaceType="{x:Type StateDemo.IService}" x:Name="Submit" Invoked="Submit_Invoked">
<HandleExternalEventActivity.ParameterBindings>
<WorkflowParameterBinding ParameterName="e">
<WorkflowParameterBinding.Value>
<ActivityBind Path="argsInfo" Name="Workflow1" />
</WorkflowParameterBinding.Value>
</WorkflowParameterBinding>
</HandleExternalEventActivity.ParameterBindings>
</HandleExternalEventActivity>
<CallExternalMethodActivity MethodName="CalledByWF" InterfaceType="{x:Type StateDemo.IService}" x:Name="callHostMethod" MethodInvoking="callHostMethod_MethodInvoking" />
<SetStateActivity x:Name="ToEnd" TargetStateName="Endstate" />
</EventDrivenActivity>
</StateActivity>
<StateActivity x:Name="Endstate" />
</StateMachineWorkflowActivity>global.asax.cs 中
WorkflowRuntime wfRuntime = new WorkflowRuntime();#if Debug
ManualWorkflowSchedulerService scheduler = new ManualWorkflowSchedulerService();
wfRuntime.AddService(scheduler);
#endif
ExternalDataExchangeService EXservice = new ExternalDataExchangeService();
StateDemo.Service service = new StateDemo.Service();
wfRuntime.AddService(EXservice);
EXservice.AddService(service); Application["WFRuntime"] = wfRuntime; wfRuntime.StartRuntime();
default.aspx.cs中:
WorkflowRuntime wfRuntime = Application["WFRuntime"] as WorkflowRuntime; WorkflowInstance instance = wfRuntime.CreateWorkflow(typeof(StateDemo.Workflow1));
ManualWorkflowSchedulerService scheduler = wfRuntime.GetService<ManualWorkflowSchedulerService>();
instance.Start();
scheduler.RunWorkflow(instance.InstanceId);
<StateActivity x:Name="InitialState">
<EventDrivenActivity x:Name="eventDriven">
<HandleExternalEventActivity EventName="Sumit" InterfaceType="{x:Type StateDemo.IService}" x:Name="Submit" Invoked="Submit_Invoked">
<HandleExternalEventActivity.ParameterBindings>
<WorkflowParameterBinding ParameterName="e">
<WorkflowParameterBinding.Value>
<ActivityBind Path="argsInfo" Name="Workflow1" />
</WorkflowParameterBinding.Value>
</WorkflowParameterBinding>
</HandleExternalEventActivity.ParameterBindings>
</HandleExternalEventActivity>
<CallExternalMethodActivity MethodName="CalledByWF" InterfaceType="{x:Type StateDemo.IService}" x:Name="callHostMethod" MethodInvoking="callHostMethod_MethodInvoking" />
<SetStateActivity x:Name="ToEnd" TargetStateName="Endstate" />
</EventDrivenActivity>
</StateActivity>
<StateActivity x:Name="Endstate" />
</StateMachineWorkflowActivity>global.asax.cs 中
WorkflowRuntime wfRuntime = new WorkflowRuntime();#if Debug
ManualWorkflowSchedulerService scheduler = new ManualWorkflowSchedulerService();
wfRuntime.AddService(scheduler);
#endif
ExternalDataExchangeService EXservice = new ExternalDataExchangeService();
StateDemo.Service service = new StateDemo.Service();
wfRuntime.AddService(EXservice);
EXservice.AddService(service); Application["WFRuntime"] = wfRuntime; wfRuntime.StartRuntime();
default.aspx.cs中:
WorkflowRuntime wfRuntime = Application["WFRuntime"] as WorkflowRuntime; WorkflowInstance instance = wfRuntime.CreateWorkflow(typeof(StateDemo.Workflow1));
ManualWorkflowSchedulerService scheduler = wfRuntime.GetService<ManualWorkflowSchedulerService>();
instance.Start();
scheduler.RunWorkflow(instance.InstanceId);
解决方案 »
- mvc开发模式中链接一个word文件下载,怎么弄?
- 求一个linq 语句
- cookie仍然在30分钟后失效,虽然我已经设置了更长的失效时间
- 我想问一个关于多线程访问的问题。
- 求: 水晶报表11 动态绑定列的实现方法
- 问一个简单的问题
- 关于ASP.NET中TextBox控件的Enabled的问题
- activex 对象不支持此属性或方法的错误
- 也许是一个很难的问题,一个页面两次进入Page_Load(),怪!
- 如何修改DataSet中Tables内的值?myDataSet.Tables["DetailList"].Rows[i].ItemArray[]?????------------------------------
- 回发时,己绑定的数据控件丢失
- 网站发布上传到服务器上后不能访问
我看了些例子,有的用ManualWorkflowSchedulerService,有的用默认的调度服务。如果单纯为了解决问题使用默认的是没问题的,但是我就是想搞明白到底怎么回事,为什么和msdn上说的不一样