WWF: SqlWorkflowInstanceStoreBehavior verus SqlWorkflowInstanceStore

У меня есть служба 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 / приложения Workflow:

        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 ответ

Решение

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

newWorkflowApplication.Persist();
Другие вопросы по тегам