Соотнесите графическое получение с другим внутри действия кода

Вы могли бы представить службу 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);
        }

    }
}

0 ответов

Другие вопросы по тегам