У меня есть действие, которое состоит из действия получения и действия SendReply.Операция приема ожидает сообщения, затем записывает его на консоль и затем отправляет ответ.
Проблема заключается в том, что я не могу получить сообщение из операции получения после его завершения.
Ниже приведен мой класс активности и информация об исключениях.
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);
}
}
Если кто-то знает, что я делаю неправильно, я был бы признателен за любую помощь.
Спасибо