Многократные действия получения в WF4 терпят неудачу, когда постоянство включено - PullRequest
5 голосов
/ 14 декабря 2010

У меня есть рабочий процесс WF4 с несколькими функциями приема.

Рабочий процесс работает нормально, пока я не добавлю постоянство. Я создал таблицы персистентности и добавил следующее в раздел \ configuration \ system.serviceModel \ moodiors \ serviceBehaviors моего web.config:

    <behavior>
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />
      <sqlWorkflowInstanceStore connectionStringName="InstanceStore"
        instanceCompletionAction="DeleteAll"
        instanceLockedExceptionAction= "NoRetry"
        instanceEncodingOption="None"
        hostLockRenewalPeriod="00:01:00" 
      />
    </behavior>

Рабочий процесс принимает параметр, который является экземпляром WorkflowInstanceDTO POCO, который я определил.

Когда я запускаю рабочий процесс со следующим кодом

    var wfi = new WFService.WorkflowInstanceDTO()
    {
        Id = 1,
        InstanceId = new Guid(),
        Description = "Awesome WFI",
        WorkflowId = 1
    };
    proxy.Create(wfi);

Ошибка в прокси. Создайте строку со следующей ошибкой.

Ключ экземпляра со значением '11e5cf14-c2a8-0fbf-d3b5-c12a91c174ff' уже существует. Это может быть потому, что есть несколько Определены наборы MessageQuerySets, которые оценивают один и тот же CorrelationKey.

Когда постоянство не включено, я не получаю эту ошибку. Кто-нибудь видел это? Что я делаю не так?

1 Ответ

1 голос
/ 21 февраля 2011

Вы инициализируете корреляцию и соотносятся ли ваши действия по получению с одним и тем же ключом?Вы захотите прочитать о корреляции на основе содержимого, если вы этого еще не сделали.

Добавьте переменную рабочего процесса под названием «sharedHandle» типа CorrelationHandle и при вызове Create инициализируйте «sharedHandle» с помощью «Инициализатор корреляции запросов ".Свойство будет то, что все принимаемые вызовы будут принимать в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...