使用 VS2012/.NET 4.5 我正在创建一个自定义活动,该活动实现了接收子活动(作为实现子活动)。以下示例中的参数仅固定为一个:Guid 类型的 OutValue。
我真的很想在 ReceiveDone 中访问传入参数值的值,因为我需要使用它并在从活动中返回它之前对其进行转换。请忽略我当前使用的是 Guid,它仍然无法使用 InvalidOperationException 访问该值:
Activity 只能获取它拥有的参数的位置。活动“TestActivity”正在尝试获取活动“等待工作流启动请求 [TestActivity 内部]”拥有的参数“OutValue”的位置
我已经尝试了我能想到的一切,但我惊呆了。一定有办法做这个非常简单的事情吗?
public class TestActivity : NativeActivity<Guid>
{
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
var content = ReceiveParametersContent.Create(new Dictionary<string, OutArgument>()
{
// How to access the runtime value of this inside TestActivity?
{"OutValue", new OutArgument<Guid>()}
});
startReceiver = new Receive()
{
DisplayName = string.Format("Wait for workflow start request [Internal for {0}]", this.DisplayName),
CanCreateInstance = true,
ServiceContractName = XName.Get("IStartService", Namespace),
OperationName = "Start",
Content = content
};
foreach (KeyValuePair<string, OutArgument> keyValuePair in content.Parameters)
{
metadata.AddImportedChild(keyValuePair.Value.Expression);
}
metadata.AddImplementationChild(startReceiver);
}
protected override void Execute(NativeActivityContext context)
{
context.ScheduleActivity(startReceiver, ReceiveDone);
}
private void ReceiveDone(NativeActivityContext context, ActivityInstance completedInstance)
{
var receive = completedInstance.Activity as Receive;
ReceiveParametersContent content = receive.Content as ReceiveParametersContent;
try
{
// This causes InvalidOperationException.
// An Activity can only get the location of arguments which it owns.
// Activity 'TestActivity' is trying to get the location of argument 'OutValue'
// which is owned by activity 'Wait for workflow start request [Internal for TestActivity]'
var parmValue = content.Parameters["OutValue"].Get(context);
}
catch (Exception)
{ }
}
private Receive startReceiver;
private const string Namespace = "http://company.namespace";
}