Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF工作流服务的输入参数在什么时候得到实例化/设置?_C#_.net 4.0_Workflow_Parameter Passing_Xoml - Fatal编程技术网

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

C# WCF工作流服务的输入参数在什么时候得到实例化/设置?,c#,.net-4.0,workflow,parameter-passing,xoml,C#,.net 4.0,Workflow,Parameter Passing,Xoml,我有一个非常简单的XOML文件,在ReceiveActivity处理程序中有一个代码活动 ReceiveActivity映射到名为IRulesEngineService的接口,该接口上有一个方法 void DoWork(int i); 接口方法上的输入参数映射到Xoml上名为I 我现在正试图在某一点上进入工作流生命周期: 就在执行第一个(并且仅在本例中)代码活动之前 在我的工作流中将i参数分配给i之后 我尝试过重写XOML上的所有各种方法和事件,但在所有情况下,I在我尝试过的所有事件和重

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

ReceiveActivity映射到名为
IRulesEngineService
的接口,该接口上有一个方法

void DoWork(int i);
接口方法上的输入参数映射到Xoml上名为
I

我现在正试图在某一点上进入工作流生命周期:

  • 就在执行第一个(并且仅在本例中)代码活动之前
  • 在我的工作流中将
    i
    参数分配给
    i
    之后
我尝试过重写XOML上的所有各种方法和事件,但在所有情况下,
I
在我尝试过的所有事件和重写中始终为零。然后在第一个代码活动中正确设置为传入参数。e、 g.想象我将
8
传递给客户端的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?
    }

任何人都知道在工作流生命周期中这些参数的实例化/绑定/设置发生在何处。

查看.NET framework源代码,在执行之前不可能访问代码活动中的数据输入。在System.Workflow.Activities命名空间中的ReceiveActivity类中,有一个精确的输入填充点。我已经从源代码中获取了类

见下图:

如图中所示,此时将填充输入:

this.OperationHelper.PopulateInputs(this, requestContext.Inputs);
在ReceiveActivity类执行活动之前调用上述指令。在这个阶段,我认为在codeActivity1\u ExecuteCode被执行之前,没有一个公共事件可以订阅来操纵您的数据

希望能有帮助