2017-02-03 32 views
1

У меня есть служба WF4.5, которую я разрабатываю для работы, которая использует активность задержки в рабочем процессе. Рабочий процесс размещается в AppFabric (тестирование локально в Visual Studio). У меня есть настройка web.config в службе, и AppFabric настроен на использование настраиваемой конфигурации. Вот образ уместном части процесса:Windows Workflow 4.5 Задержка не работает

WorkflowDelayActivity

Точки, чтобы получить от изображения, что активность до задержки (Определяют Communication) мчит и я проверяемое доказательство. Я также знаю, что UpdateRejectionInfo после действия задержки НЕ запускается (проверяется с точкой останова в пользовательской активности при запуске рабочего процесса).

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

Вот раздел поведение web.config для службы тоже:

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <sqlWorkflowInstanceStore 
     connectionString="SERVER=hq-sql02\oculusdev;Database=EAA;Trusted_Connection=yes" 
     hostLockRenewalPeriod="00:00:30" 
     runnableInstancesDetectionPeriod="00:00:30" 
     instanceCompletionAction="DeleteNothing" 
     instanceLockedExceptionAction="AggressiveRetry" 
     instanceEncodingOption="GZip"/> 
     <workflowIdle timeToPersist="00:00:20" timeToUnload="00:00:30"/> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Любой вид помощи будет удивительно.

ответ

2

Хорошо. Поэтому ответ на этот вопрос выходит далеко за пределы активности задержки и попадает в другие технологии, которые я использую, о которых я даже не упоминал.

TL; 0: Я не установил объекты инфраструктуры сущности, чтобы отключить ленивую загрузку. Поэтому при сериализации данных было выбрано исключение, которое я никогда не видел, и это приведет к сбою рабочего процесса.

Длинная версия: При сохранении данных в базе данных программа пытается сериализовать все объекты в области рабочего процесса. Это нормально для стандартных объектов C#, но когда они становятся сложными объектами, сериализация становится более сложной.

Для удобства технологий я использую Entity Framework (сначала базу данных) в моем проекте для передачи и сохранения объектов базы данных. Когда сущности Entity Framework сериализуются, они пытаются захватить всю доступную ему информацию. У Well Entity Framework есть эта идея ленивых данных загрузки, поэтому, если вы получаете сущность из базы данных, и вы хотите получить слой глубже (т. Е. Через отношение внешних ключей), он вернется и запросит базу данных для этой информации , Ну, общий способ получить сущности из базы данных - это получить объект, а затем сократить соединение с базой данных, используя кратковременное использование блоков.

Если вы решили использовать короткий срок с помощью блоков (что мне нравится называть одноточечными сущностями), и вы не отключаете ленивую загрузку, тогда, когда программа пытается сериализовать сущность, она начнет запрашивать все дополнительные данные, которые не были захвачены по первоначальному запросу. И если этот используемый блок был удален, соединение с базой данных будет недоступно, и оно вызовет исключение.

Я не фиксировал исключения, которые выполняли встроенные действия, и поэтому это не выглядело так, как будто это было неудачно, когда это было на самом деле.

Смежные вопросы