вы можете себе представить службу xaml, которая выставляет действия получения.Это первое занятие на моем рабочем месте.За этим получением стоят простые действия, такие как InitializateCorrelation "," assign "," delay "... что угодно. Затем у меня есть пользовательское действие, которое было выполнено с помощью дизайнера действий. Поэтому у меня действительно есть кодовое действие в моем основном рабочем процессе.предлагает зону перетаскивания, позволяющую разработчику настроить действие. Но я хочу, чтобы это действие сначала имело фиксированное действие получения. Это получение должно коррелировать с использованием первого дескриптора корреляции, который был инициализирован с использованием информации, полученной при первом получениислужба.
Моя проблема в том, что я не могу сопоставить получение в коде активности, используя дескриптор корреляции, инициализированный в xaml. Я получаю ошибки тайм-аута при вызове второго приема (получение кода).
Знаете ли вы, что не так?
Это код моего кода активности
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;
using System.ComponentModel;
using WF4ActivityDesignerLibrary.ActivityDesigner;
using System.Xml.Linq;
using System.ServiceModel.Activities;
using System.ServiceModel;
using System.Activities.Statements;
namespace WF4ActivityDesignerLibrary.Activities
{
[Designer(typeof(ContainerWithMultipleActivitiesDesigner))]
public class ActivityWithMultipleChild : NativeActivity
{
public List<Activity> Activities { get; set; }
private Receive ReceiveCancel { get; set; }
private SendReply ReplyCancel { get; set; }
private CorrelationScope Scope { get; set; }
public InArgument<System.ServiceModel.Activities.CorrelationHandle> HandleToCorrelate { get; set; }
private Variable<CorrelationHandle> CorrelationHandle { get; set; }
private Variable<string> orderid = new Variable<string> { Name = "orderid" };
//public SendReply SendReplyCancel { get; set; }
public ActivityWithMultipleChild()
{
Activities = new List<Activity>();
InitializeReceiveAndReply();
}
private void InitializeReceiveAndReply()
{
CorrelationHandle = new Variable<CorrelationHandle>("SenseProcessCorrelationHandle");
ReceiveCancel = new Receive
{
CanCreateInstance = false,
ServiceContractName = "IOrderService",
OperationName = "StartOrder",
CorrelatesWith = HandleToCorrelate,
ProtectionLevel = System.Net.Security.ProtectionLevel.None,
SerializerOption = System.ServiceModel.Activities.SerializerOption.DataContractSerializer,
DisplayName = "Segundo Receive",
CorrelatesOn = new MessageQuerySet
{
{ "key1", new XPathMessageQuery("string('11445')") }
},
Content = new ReceiveParametersContent()
{
Parameters = { { "orderid", new OutArgument<string>(this.orderid) } }
},
CorrelationInitializers =
{
new RequestReplyCorrelationInitializer
{
CorrelationHandle = CorrelationHandle,
}
}
};
ReplyCancel = new SendReply
{
Request = ReceiveCancel,
PersistBeforeSend = true,
Content = SendParametersContent.Create(new Dictionary<string, InArgument> { { "OrderId", new InArgument<string>((env) => "asdf") } })
};
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
metadata.AddVariable(this.orderid);
metadata.AddChild(ReceiveCancel);
metadata.AddChild(ReplyCancel);
metadata.AddVariable(CorrelationHandle);
}
protected override void Execute(NativeActivityContext context)
{
ReceiveCancel.CorrelatesWith = context.GetValue<CorrelationHandle>(HandleToCorrelate);
context.ScheduleActivity(ReceiveCancel, OnReceiveCompleted);
Activities.Reverse(0, Activities.Count);
}
void OnReceiveCompleted(NativeActivityContext context, ActivityInstance inst)
{
foreach (Activity act in Activities)
{
context.ScheduleActivity(act);
}
context.ScheduleActivity(ReplyCancel);
}
}
}