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
};
Вопросы:
Перехватывает ли ServiceHost SqlWorkflowInstanceStoreBehavior SqlWorkflowInstanceStore в приложении WorkflowApplication? Если это так, очевидным ответом будет удаление SqlWorkflowInstanceStoreBehavior на ServiceHost; однако, как и предполагалось ранее, я боюсь, что это окажется бесплодным, поскольку приложение WorkflowApplication в настоящее время ничего не регистрирует (или даже пытается, насколько я могу судить).
ASAppInstanceService кажется специфичным для WindowsServer. Можно ли разместить их (для разработки / подготовки к работе) в Windows 10, если ServiceHost (с помощью опции Windows Service) всегда будет блокировать / отключать приложение WorkflowApplication от выполнения вызовов SQL?