- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 WorkflowApplication 在 IIS 中托管 WF4 工作流的应用程序
工作流由用户定义(使用重新托管的工作流设计器)并且 xml 存储在数据库中。然后,根据使用该应用程序的用户操作,在数据库中选择一个 xml 并创建/恢复工作流。
我的问题是:当工作流到达书签并闲置时,它会保持锁定状态不同的时间。然后,如果用户尝试对这个工作流程进行另一个操作,我会得到这个异常:
The execution of an InstancePersistenceCommand was interrupted because the instance '52da4562-896e-4959-ae40-5cd016c4ae79' is locked by a different instance owner. This error usually occurs because a different host has the instance loaded. The instance owner ID of the owner or host with a lock on the instance is 'd7339374-2285-45b9-b4ea-97b18c968c19'.
现在是写一段代码的时候了
当我的工作流空闲时,我指定它应该被卸载:
private PersistableIdleAction handlePersistableIdle(WorkflowApplicationIdleEventArgs arg)
{
this.Logger.DebugFormat("Workflow '{1}' is persistableIdle on review '{0}'", arg.GetReviewId(), arg.InstanceId);
return PersistableIdleAction.Unload;
}
对于我需要的 WorkflowApplication,我创建了一个新的 SqlWorkflowInstanceStore:
var store = new SqlWorkflowInstanceStore(this._connectionString);
store.RunnableInstancesDetectionPeriod = TimeSpan.FromSeconds(5);
store.InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry;
这是我的 WorkflowApplication 是如何创建的
WorkflowApplication wfApp = new WorkflowApplication(root.RootActivity);
wfApp.Extensions.Add(...);
wfApp.InstanceStore = this.createStore();
wfApp.PersistableIdle = this.handlePersistableIdle;
wfApp.OnUnhandledException = this.handleException;
wfApp.Idle = this.handleIdle;
wfApp.Unloaded = this.handleUnloaded;
wfApp.Aborted = this.handleAborted;
wfApp.SynchronizationContext = new CustomSynchronizationContext();
return wfApp;
然后我调用 Run 方法启动它。一些解释:
- root.RootActivity:它是从存储在数据库中的工作流 XML 创建的事件
- CustomSynchronizationContext:处理授权的同步上下文
- 在卸载工作流时记录的 handleUnloaded 方法中,我看到工作流在下一个用户操作之前正确卸载,但似乎工作流在卸载后保持锁定状态(?)
然后,稍后,当我需要恢复工作流时,我会以相同的方式创建工作流,然后调用:
wfApp.Load(workflowInstanceId);
抛出上面指定的“锁定”异常。如果我等几分钟,然后重试,效果很好。
我读了一篇 here 的帖子,说我们需要设置一个所有者。所以我也尝试过使用静态 SqlWorkflowInstanceStore 和使用此代码设置的所有者:
if (_sqlWorkflowInstanceStore != null)
return _sqlWorkflowInstanceStore;
lock (_mutex)
{
if (_sqlWorkflowInstanceStore != null)
return _sqlWorkflowInstanceStore;
// Configure store
_sqlWorkflowInstanceStore = new SqlWorkflowInstanceStore(this._connectionString);
_sqlWorkflowInstanceStore.RunnableInstancesDetectionPeriod = TimeSpan.FromSeconds(5);
_sqlWorkflowInstanceStore.InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry;
// Set owner - Store will be read-only beyond this point and will not be configurable anymore
var handle = _sqlWorkflowInstanceStore.CreateInstanceHandle();
var view = _sqlWorkflowInstanceStore.Execute(handle, new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(5));
handle.Free();
_sqlWorkflowInstanceStore.DefaultInstanceOwner = view.InstanceOwner;
}
return _sqlWorkflowInstanceStore;
但是我遇到了这种异常:
The execution of an InstancePersistenceCommand was interrupted because the instance owner registration for owner ID '9efb4434-8560-469f-9d03-098a2d48821e' has become invalid. This error indicates that the in-memory copy of all instances locked by this owner have become stale and should be discarded, along with the InstanceHandles. Typically, this error is best handled by restarting the host.
有谁知道如何确保在卸载工作流时立即释放对工作流的锁定?我看到一些 post 使用 WorkflowServiceHost(使用 WorkflowIdleBehavior)来执行此操作,但这里我不使用 WorkflowServiceHost,我使用 WorkflowApplication
感谢您的帮助!
最佳答案
我怀疑问题出在 SqlWorkflowInstanceStore 的 InstanceOwner 上。它不会被删除,因此工作流需要等待前一个的所有权超时。
创建实例所有者
var instanceStore = new SqlWorkflowInstanceStore(connStr);
var instanceHandle = instanceStore.CreateInstanceHandle();
var createOwnerCmd = new CreateWorkflowOwnerCommand();
var view = instanceStore.Execute(instanceHandle, createOwnerCmd, TimeSpan.FromSeconds(30));
instanceStore.DefaultInstanceOwner = view.InstanceOwner;
删除实例所有者
var deleteOwnerCmd = new DeleteWorkflowOwnerCommand();
instanceStore.Execute(instanceHandle, deleteOwnerCmd, TimeSpan.FromSeconds(30));
另一个可能的问题是,当工作流中止时,未调用 Unloaded 回调。
关于c# - WF4 : Workflow stay locked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12797975/
我的新 Nexus One 预装了 CyanogenMod。到目前为止它很棒,但由于我出于软件开发目的购买它(最初只是学习如何为 Android 编程),我应该继续使用它,还是安装官方 Android
在附带的笔中,我想编写我的代码,以便一旦用户将“选择设计”悬停在上方,选项就会保留,不会在用户将鼠标移开后立即消失。 https://codepen.io/anon/pen/EGNGdR 这是我尝试过
我有 CSS 问题。 这是 JsFiddle:http://jsfiddle.net/63NHM/1/ 问题是标题下的正文不会自动换行,他“停留”在一行中,这不好。 这是本节的CSS #trackde
我正在尝试制作自定义控件库。起初我以为我已经完成了表格并且完全可以工作,但我没有。我不会询问如何解决我的表单问题,而是使用我的按钮询问。 我正在制作一个自定义按钮,它可以根据每个状态进行广泛自定义,它
我有 Mysql 5.5我创建了一个存储过程 CREATE DEFINER=`root`@`%` PROCEDURE `refresh_mobileTemp`() BEGIN DROP TABLE I
有没有办法让 Java 应用程序的框架停留在我用 .setLocation 让它出现的位置?我想禁用它被用户在屏幕上移动的能力。 最佳答案 以下是防止移动 JFrame 的方法。在生产应用程序中使用它
我已经尝试了很多次迭代,但它似乎不想只停留在最后一个关键帧上。 我不确定我在这里做错了什么。 #container{ position: relative; width: 100%;
我正在尝试生成一个 svg 矩形和一个 span,以便 span 元素中的文本与 svg 元素垂直对齐。在声明式 HTML+CSS 中,我设法做到了。但我无法通过 javascript 做到这一点。
我目前正在努力使我的伪元素 :before 在单击时保持事件状态。 我在这里做了一个小演示: https://jsfiddle.net/ud8p2nak/1/ 我希望它在当前页面上保持事件状态,所以如
当我指向主菜单时,我得到了我的颜色: 但是当我指向子菜单项时,菜单更改为默认颜色而不是我的颜色。 我的 CSS: .menu:hover { -fx-background-color: #D5
我想在我的 jsp 登录页面中实现保持登录状态或记住我。我正在使用基于容器的表单例份验证。我想我需要将用户的数据(例如 userid 和 token)存储到 cookie 中,这是一种状态信息,用于确
我有一个程序,其中我全局定义的静态变量一旦离开我的“初始化函数”(不是构造函数)就不会保持初始化状态。这是该程序: type.h namespace type { static int * s
在 Delphi XE Update 1 中,如果父(主)表单的 FormStyle 设置为 fsStayOnTop,我会得到模态表单看似随机的行为。 1) 使用 MainFormOnTaskbar
在大多数网站上,当用户要提供用户名和密码登录系统时,都会有一个复选框,例如“保持登录状态”。如果您选中该框,您将在同一 Web 浏览器的所有 session 中保持登录状态。如何在 Java EE 中
我查找了一些有关此警告的答案,但它们既没有帮助我,也没有真正理解 Perl 在这里所做的事情。这就是我想要它做的事情: sub outerSub { my $dom = someBigDOM;
如何在页面加载时显示 qTip 标注,并且即使我将鼠标悬停在该字段上也保留在那里。本质上,我只想要一个固定的标注,并且使用 qTip 来简化定位和样式设置。 注意:我尝试了“show: {ready:
我有一个使用 WorkflowApplication 在 IIS 中托管 WF4 工作流的应用程序 工作流由用户定义(使用重新托管的工作流设计器)并且 xml 存储在数据库中。然后,根据使用该应用程序
所以这真的让我很烦,我不知道这是浏览器相关的故障还是 javascript 就是这样工作的(我希望是这样)。我创建了一个 fiddle 。 https://jsbin.com/laluziqede/1
我已经用 CSS3/javascript 做了一个幻灯片演示,但这不能正常工作.. 当您单击箭头时,“diapos”div 会朝一个方向移动,但在我的例子中,框内的文本并没有完全移动,一小部分文本留在
我希望所有非 EN 的访问者都能被重定向,但来自 EN 的访问者应该留在网站上。有命令吗? var country= geoip_country_code(); if(country =
我是一名优秀的程序员,十分优秀!