如何从本地活动中的计划活动获取OutArgument?

问题描述:

我有一个由接收活动和SendReply活动组成的活动。接收活动等待消息,然后将其写出到控制台,然后发送答复。如何从本地活动中的计划活动获取OutArgument?

问题是我无法从接收活动完成时收到消息。

下面是我的活动类和异常信息。

public sealed class MyActivity : NativeActivity 
{ 
    private Receive Receive { get; set; } 
    private SendReply SendReply { get; set; } 

    private Variable<CorrelationHandle> CorrelationHandle { get; set; } 
    private Variable<string> MessageParameter { get; set; } 
    private Variable<string> ResponseParameter { get; set; } 

    public MyActivity() 
    { 
     CorrelationHandle = new Variable<CorrelationHandle>("SenseProcessCorrelationHandle"); 
     MessageParameter = new Variable<string>("MessageParamter"); 
     ResponseParameter = new Variable<string>("ResponseParam"); 

     Receive = new Receive 
     { 
      ServiceContractName = XName.Get("{http://tempuri.org/}MyService"), 
      OperationName = "Trigger", 
      Content = new ReceiveParametersContent 
      { 
       Parameters = 
       { 
        { "Message", new OutArgument<string>(MessageParameter) }, 
       }, 
      }, 
      CanCreateInstance = true, 
      CorrelationInitializers = 
      { 
       new RequestReplyCorrelationInitializer 
       { 
        CorrelationHandle = new InArgument<CorrelationHandle>(CorrelationHandle), 
       } 
      } 
     }; 

     SendReply = new SendReply 
     { 
      Request = Receive, 
      Content = new SendMessageContent 
      { 
       Message = new InArgument<string>(ResponseParameter), 
      } 
     }; 

    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     context.ScheduleActivity(Receive, OnReceiveCompleted); 
    } 

    void OnReceiveCompleted(NativeActivityContext context, ActivityInstance inst) 
    { 

     /* Next code line throws exception 
     * 
     * Activity '2: MyActivity' cannot access this variable because it is 
     * declared at the scope of activity '2: MyActivity'. An activity 
     * can only access its own implementation variables. 
     */ 
     Console.WriteLine(MessageParameter.Get(context));    

     context.ScheduleActivity(SendReply); 
    } 

    protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     metadata.AddChild(Receive); 
     metadata.AddChild(SendReply); 
     metadata.AddVariable(CorrelationHandle); 
     metadata.AddVariable(ResponseParameter); 
     metadata.AddVariable(MessageParameter);    
    } 
} 

如果有人知道我做错了什么,我将不胜感激任何帮助。

感谢

您必须输入的,而不是你的代码验证码:

CorrelationInitializers = 
{     
    new RequestReplyCorrelationInitializer 
    { 
     CorrelationHandle = CorrelationHandle 
    }   
} 

其中第二CorrelationHandle是您的变量没有做出新的inargument。