WWF: SqlWorkflowInstanceStoreBehavior verus SqlWorkflowInstanceStore - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть служба Windows, обертывающая службу WCF, которая содержит приложение WorkflowApplication, которое выполняет действия.Я также настроил SQL Server 2008 Express (я знаю, что он приближается к EOL, но в документации явно указано, что поддерживается только SQL Server 2005 или SQL Server 2008) для размещения базы данных, и соединение работает .Чтобы быть еще яснее: весь процесс Activity завершается и получает возврат (я вызываю его через клиента WCF, завернутый в PowerShell).

Проблема, с которой я столкнулся, заключается в том, что я настроилSqlWorkflowInstanceStoreBehavior в ServiceHost и SqlWorkflowInstanceStore в приложении WorkflowApplication.Ни один из них не вызывает исключение SQL, но я думаю , что ServiceHost принимает меры предосторожности, поскольку все, что я вижу, это отдельная запись в LockOwnersTable.

Код из службы Windows:

        this.obj = new ServiceHost(typeof(WorkflowService));
        SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior("Server=.\\SQL2008EXPRESS;Initial Catalog=WorkflowInstanceStore;Integrated Security=SSPI")
        {
            HostLockRenewalPeriod = TimeSpan.FromSeconds(5),
            InstanceCompletionAction = InstanceCompletionAction.DeleteNothing,
            InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry,
            InstanceEncodingOption = InstanceEncodingOption.GZip,
            RunnableInstancesDetectionPeriod = TimeSpan.FromSeconds(2)
        };
        this.obj.Description.Behaviors.Add(instanceStoreBehavior);
        this.obj.Open();

Код из службы WCF / рабочий процессПрименение:

        SqlWorkflowInstanceStore newSqlWorkflowInstanceStore = new SqlWorkflowInstanceStore("Server=.\\SQL2008EXPRESS;Initial Catalog=WorkflowInstanceStore;Integrated Security=SSPI")
                                                        {
                                                            EnqueueRunCommands = true,
                                                            HostLockRenewalPeriod = TimeSpan.FromSeconds(5),
                                                            InstanceCompletionAction = InstanceCompletionAction.DeleteNothing,
                                                            InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry,
                                                            RunnableInstancesDetectionPeriod = TimeSpan.FromSeconds(5)
                                                        };
        InstanceHandle workflowInstanceStoreHandle = newSqlWorkflowInstanceStore.CreateInstanceHandle();
        CreateWorkflowOwnerCommand createWorkflowOwnerCommand = new CreateWorkflowOwnerCommand();
        InstanceView newInstanceView = newSqlWorkflowInstanceStore.Execute(workflowInstanceStoreHandle, createWorkflowOwnerCommand, TimeSpan.FromSeconds(30));
        newSqlWorkflowInstanceStore.DefaultInstanceOwner = newInstanceView.InstanceOwner;

        // Now stage the WorkflowApplication, using the SQL instance.
        AutoResetEvent syncEvent = new AutoResetEvent(false);
        WorkflowApplication newWorkflowApplication = new WorkflowApplication(unwrappedActivity)
                                                         {
                                                             InstanceStore = newSqlWorkflowInstanceStore
                                                         };

Вопросы:

  1. Перехватывает ли ServiceHost SqlWorkflowInstanceStoreBehavior SqlWorkflowInstanceStore в приложении WorkflowApplication?Если это так, очевидным ответом будет удаление SqlWorkflowInstanceStoreBehavior на ServiceHost;однако, как и предполагалось ранее, я боюсь, что это окажется бесплодным, поскольку приложение WorkflowApplication в настоящее время ничего не регистрирует (или даже пытается, насколько я могу судить).

  2. ASAppInstanceService кажется специфичнымWindowsServer.Возможно ли разместить их (для разработки / подготовки к выпуску) в Windows 10, если ServiceHost (с помощью опции Windows Service) равен всегда , собираясь блокировать / отключать приложение WorkflowApplication от выполнения вызовов SQL?

1 Ответ

0 голосов
/ 05 февраля 2019

выяснил ответ:

newWorkflowApplication.Persist();
...