ASP.NET MVCではWFを使用
本稿はASPに基づく.NET MVCのbetaバージョン.1.まずASPを作成します.NET MVCのアプリ.Webでconfigでは、次の構成を関連する場所に追加します.コードは次のとおりです.
注:4.1.ASP.NET MVCでは以下のコードによりGlobalを得る.asax.csのApplicationオブジェクト:ControllerContext cxt=this.ControllerContext; WorkflowRuntime workflowRuntime = cxt.HttpContext.Application["WorkflowRuntime"] as WorkflowRuntime; 4.2.ワークフローを呼び出すときに、ManualWorkflowSchedulerServiceをマウントすることが重要です.これにより、ワークフローの同期をASPに実行することができる.NET MVCのスレッド上.サービスワークフローインスタンスをロードしないと、Workflow runtimeによって管理されているスレッドで非同期に実行されます.4.3.ワークフローを呼び出して加算を完了し、結果をビューIndexに返します.
5.次に、WFプログラムを見てみましょう.ワークフローデザイナにCodeActivityをドラッグして、加算の論理を完了します.ワークフローのコードは次のとおりです.
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.
WorkflowRuntimeSection,System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<WorkflowRuntime Name="WorkflowServiceContainer">
<Services>
<add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService,
System.Workflow.Runtime,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"/>
<add type="System.Workflow.Runtime.Hosting.DefaultWorkflowCommitWorkBatchService,
System.Workflow.Runtime,Version=3.0.0.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" LoadIntervalSeconds="5" ConnectionString="Initial Catalog=
WorkflowPersistence;Data Source=localhost\SQLEXPRESS;Integrated Security=SSPI;"/>
</Services>
</WorkflowRuntime>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="Accessibility,Version=2.0.0.0,Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Workflow.Runtime, 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.Activities, Version=3.0.0.0,Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<authentication mode="Windows"/>
</system.web>
</configuration>
, 。
2. Global.asax.cs Application_Start() Application_End (WorkflowRuntime),
:
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
WorkflowRuntime workflowRuntime =new WorkflowRuntime("WorkflowRuntime");
workflowRuntime.StartRuntime();
Application["WorkflowRuntime"] = workflowRuntime;
}
void Application_End(object sender, EventArgs e)
{
WorkflowRuntime workflowRuntime =Application["WorkflowRuntime"] as WorkflowRuntime;
workflowRuntime.StopRuntime();
}
3. , ,Index :
<p>
<%Html.BeginForm("Compute","Home");%>
<label> :</label><%=Html.TextBox("Number1") %><br />
<label> :</label><%=Html.TextBox("Number2") %><br />
<input type="submit" value=" "></input><br/>
<label> :</label> <%=Html.Encode(ViewData["Result"]) %>
<%Html.EndForm(); %>
</p>
HomeControler Compute Action WF 。
4. HomeControler Compute Action, :
int Result = 0;
public ActionResult Compute()
{
ControllerContext cxt = this.ControllerContext;
WorkflowRuntime workflowRuntime = cxt.HttpContext.Application["WorkflowRuntime"]
as WorkflowRuntime;
ManualWorkflowSchedulerService scheduler =workflowRuntime.GetService(
typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;
workflowRuntime.WorkflowCompleted+= new EventHandler<WorkflowCompletedEventArgs>(
workflowRuntime_WorkflowCompleted);
int Number1 = Int32.Parse(Request.Form["Number1"]);
int Number2 = Int32.Parse(Request.Form["Number2"]);
Dictionary<String, Object> wfPara= new Dictionary<string, object>();
wfPara.Add("Number1", Number1);
wfPara.Add("Number2", Number2);
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(CaryWFLib.AddWorkflow),
wfPara);
instance.Start();
scheduler.RunWorkflow(instance.InstanceId);
ViewData["Result"]=Result;
return View("Index");
}
void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
{
if (e.OutputParameters.ContainsKey("Result"))
{
Result = (int)e.OutputParameters["Result"];
}
}
注:4.1.ASP.NET MVCでは以下のコードによりGlobalを得る.asax.csのApplicationオブジェクト:ControllerContext cxt=this.ControllerContext; WorkflowRuntime workflowRuntime = cxt.HttpContext.Application["WorkflowRuntime"] as WorkflowRuntime; 4.2.ワークフローを呼び出すときに、ManualWorkflowSchedulerServiceをマウントすることが重要です.これにより、ワークフローの同期をASPに実行することができる.NET MVCのスレッド上.サービスワークフローインスタンスをロードしないと、Workflow runtimeによって管理されているスレッドで非同期に実行されます.4.3.ワークフローを呼び出して加算を完了し、結果をビューIndexに返します.
5.次に、WFプログラムを見てみましょう.ワークフローデザイナにCodeActivityをドラッグして、加算の論理を完了します.ワークフローのコードは次のとおりです.
public sealed partial class AddWorkflow: SequentialWorkflowActivity
{
public int Number1 { get; set; }
public int Number2 { get; set; }
public int Result { get; set; }
public AddWorkflow()
{
InitializeComponent();
}
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
Result = Number1 + Number2;
}
}
6. , :
7. home/index , , HomeControler Compute Action, ,
: