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