在什么时候WCF工作流服务的输入参数被实例化/设置?

时间:2013-05-17 11:41:53

标签: c# .net-4.0 workflow parameter-passing xoml

我有一个非常简单的XOML文件,在ReceiveActivity处理程序中有一个代码活动。

ReceiveActivity通过单一方法映射到名为IRulesEngineService的接口。

void DoWork(int i);

接口方法的输入参数映射到名为I的Xoml上的属性

Simple Workflow / Simple Input Parameter

我现在正试图尝试进入工作流程生命周期:

  • 就在第一个(仅在这种情况下)代码活动被执行之前
  • 在我的工作流程中将i参数分配给I之后

我已尝试覆盖XOML上的所有各种方法和事件,但在所有情况下I在我尝试的所有事件和覆盖中始终为零。然后在第一个Code Activity中正确设置为传入的Parameter。例如想象一下,我将8传递给ClientSide DoWork呼叫。

    public int I {get; set;}

    protected override void Initialize(System.IServiceProvider provider)
    {
        I = I*10; //I is still 0
        base.Initialize(provider);
        I = I * 10; //I is still 0
    }

    //Event on Xoml Designer
    private void Pinnacle_Initialized(object sender, EventArgs e)
    {
        I = I * 10; //I is still 0
    }

    //Event on Xoml Designer
    private void receiveActivity1_OperationValidation(object sender, OperationValidationEventArgs e)
    {
        I = I * 10; //I is still 0
    }

    protected override void OnActivityExecutionContextLoad(IServiceProvider provider)
    {
        I = I * 10; //I is still 0
        base.OnActivityExecutionContextLoad(provider);
        I = I * 10; //I is still 0
    }

    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
    {
        DataAccess.WriteToDummyData(ConnectionString, "Pinnacle From Code Activity " + I);
        //I is now magically '8' what the heck set this?
    }

任何人都对工作流生命周期中这些参数的实例化/绑定/设置的位置有任何想法。

1 个答案:

答案 0 :(得分:1)

查看.NET框架源代码,在执行之前无法访问代码活动中的数据输入。在System.Workflow.Activities命名空间的ReceiveActivity类中,有一个输入填充的确切位置。我从this link

获取了课程来源

见下图:

ExecuteActivity Method

正如您在图片中看到的那样,输入在此处填充:

this.OperationHelper.PopulateInputs(this, requestContext.Inputs);

上述指令在ReceiveActivity类执行活动之前调用。在这个阶段,我认为在执行codeActivity1_ExecuteCode之前,可以订阅操作数据的公共事件。

希望它有所帮助。