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