Как получить OutArgument из запланированного действия внутри собственного действия?

У меня есть действие, состоящее из действия Receive и действия SendReply. Действие получения ожидает сообщения, затем записывает его на консоль и отправляет ответ.

Проблема в том, что я не могу получить сообщение от действия Receive, когда оно завершится.

Ниже мой класс активности и информация об исключении.

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);            
    }
}

Если кто-нибудь знает, что я делаю неправильно, буду признателен за любую помощь.

Спасибо


person monkey_p    schedule 03.03.2011    source источник


Ответы (1)


Вы должны ввести этот код вместо вашего кода:

CorrelationInitializers = 
{                 
    new RequestReplyCorrelationInitializer  
    {
        CorrelationHandle = CorrelationHandle 
    }          
}

Какая вторая CorrelationHandle является вашей переменной, не создает нового аргумента.

person maryam    schedule 07.08.2011