![](/img/trans.png)
[英]Workflow Foundation - Activity: Is it possible to cast a OutArgument?
[英]How to get OutArgument from a scheduled activity inside a native activity?
我有一個包含接收活動和發送回復活動的活動。 接收活動等待消息,然后將其寫出到控制台,然后發送答復。
問題是完成后我無法從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);
}
}
如果有人知道我在做什么錯,我將不勝感激。
謝謝
您必須輸入以下代碼而不是代碼:
CorrelationInitializers =
{
new RequestReplyCorrelationInitializer
{
CorrelationHandle = CorrelationHandle
}
}
哪個第二CorrelationHandle是您的變量,請不要重新聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.