WF4 InstancePersistenceCommand 中断

2024-01-12

我有一个 Windows 服务,正在运行工作流程。工作流程是从数据库加载的 XAML(用户可以使用重新托管的设计器定义自己的工作流程)。它配置有一个 SQLWorkflowInstanceStore 实例,以便在空闲时保留工作流。 (它基本上源自 Microsoft 的 WCF/WF 示例的 \ControllingWorkflowApplications 中的示例代码)。

但有时我会收到如下错误:

System.Runtime.DurableInstancing.InstanceOwnerException: InstancePersistenceCommand 的执行被中断,因为所有者 ID 'a426269a-be53-44e1-8580-4d0c396842e8' 的实例所有者注册已变得无效。此错误表明该所有者锁定的所有实例的内存中副本已过时,应与 InstanceHandles 一起丢弃。通常,最好通过重新启动主机来处理此错误。

我一直在努力寻找原因,但在开发中很难重现,但在生产服务器上,我偶尔会遇到它。我发现的一个提示:当我查看 LockOwnersTable 时,我发现 LockOnwersTable lockexpiration 设置为 01/01/2000 0:0:0 并且它不再更新,而在正常情况下,应该根据每 x 秒更新一次主机锁续订期...

那么,为什么 SQLWorkflowInstanceStore 会停止更新此 LockExpiration 以及如何检测其原因?


发生这种情况是因为有程序在后台运行,并尝试每 30 秒延长实例存储的锁定,并且似乎一旦连接到 SQL 服务失败,它就会将此实例存储标记为无效。 如果从 [LockOwnersTable] 表中删除实例存储记录,您会看到相同的行为。 建议的解决方案是,当引发此异常时,您需要释放旧实例存储并初始化一个新实例存储

public class WorkflowInstanceStore : IWorkflowInstanceStore, IDisposable
{
    public WorkflowInstanceStore(string connectionString)
    {
        _instanceStore = new SqlWorkflowInstanceStore(connectionString);

        InstanceHandle handle = _instanceStore.CreateInstanceHandle();
        InstanceView view = _instanceStore.Execute(handle, 
            new CreateWorkflowOwnerCommand(), TimeSpan.FromSeconds(30));
        handle.Free();

        _instanceStore.DefaultInstanceOwner = view.InstanceOwner;
    }

    public InstanceStore Store
    {
        get { return _instanceStore; }
    }

    public void Dispose()
    {
        if (null != _instanceStore)
        {
            var deleteOwner = new DeleteWorkflowOwnerCommand();
            InstanceHandle handle = _instanceStore.CreateInstanceHandle();
            _instanceStore.Execute(handle, deleteOwner, TimeSpan.FromSeconds(10));
            handle.Free();
        }
    }

    private InstanceStore _instanceStore;
}

您可以在此链接中找到创建实例存储句柄的最佳实践工作流实例存储最佳实践 http://www.morganskinner.com/2015/01/self-hosting-workflowworking-with.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WF4 InstancePersistenceCommand 中断 的相关文章

随机推荐

  • 澳大利亚手机号码正则表达式验证需要在号码之间留有空格

    我需要验证手机号码 第一个以 04 开头的文本输入 总共 10 位数字 包括 04 例如 0412345678 我的输入字段在下面
  • 使用听写 - iOS 6 - DidStart?

    如何回应starting听写 响应听写的已知方法 dictationRecordingDidEnd 响应完成的承认 短语 听写识别失败 回复failed听写识别 参考 UITextInput 协议参考 从 iOS 5 1 开始 当用户在支持
  • 动态创建变量是个好主意吗?

    最近发现了如何通过这个方法在python中动态创建变量 vars my variable Some Value 从而创建变量my variable 我的问题是 这是个好主意吗 或者我应该总是提前声明变量 我认为如果可能的话最好使用字典 va
  • 视频流基础设施

    我们想建立一个实时视频聊天网站 并正在寻找基本的架构建议和 或针对要使用的特定框架的推荐 以下是该网站的基本功能 大多数流媒体将由一个人通过网络摄像头等进行现场直播 通常由 1 10 人观看 但最多可能有 100 多名观众 音频和视频不必是
  • Spark 对分隔数据进行排序

    我是 Spark 新手 您能告诉我以下代码有什么问题吗 val rawData USA E001 ABC DE 19850607 IT 100 UK E005 CHAN CL 19870512 OP 200 USA E003 XYZ AB
  • 获取上周唯一的最新数据并对某些列求和

    仅获取上周的最新数据并对某些列求和 我用数据 实际结果和预期做了一个例子 http rextester com HMB12638 http rextester com HMB12638 Taking first as example use
  • Select2限制标签数量

    有没有办法限制用户可以使用 Select2 添加到输入字段的标签数量 I have tags select2 containerCssClass supplierTags placeholder Usual suppliers minimu
  • 如何使用 Bash 获取屏幕会话中的命令历史记录?

    如果我开始一个屏幕会话screen dmS name 我如何使用脚本访问该屏幕会话的命令历史记录 Using the the last executed command appears even in screen 我在系统上使用默认的 b
  • 推理 Big O 的正式定义时遇到一些困难

    我的教授最近回顾了 Big O 的正式定义 老实说 即使他向几个不同的学生解释了它 我们似乎仍然没有理解它的核心 理解上的问题主要出现在我们经历的以下例子中 到目前为止 我的推理如下 当您将函数的最高项乘以常数时 您会得到一个新函数 该新函
  • 循环变量覆盖全局变量

    在Python中 为什么循环变量会覆盖已经定义的全局变量 将循环变量放入模块的全局命名空间而不是仅用于循环的新本地命名空间似乎违反直觉 这是一个显示我正在谈论的内容的示例 c 3 14 print before loop c format
  • 如何从 Blazor 中的另一个组件重新渲染组件?

    我有一个电子商务Blazor服务器项目 我想重新渲染推车组件将商品添加到购物车后产品组件 我尝试将 Cart 组件继承到 Product 组件 并运行 Cart 组件的公共方法来重新渲染其组件 添加到购物车方法产品组件 产品 剃须刀 pub
  • 如何对一周中每一天的每个小时进行分组和绘图

    我需要帮助弄清楚如何绘制子图 以便与显示的数据框进行轻松比较 Date A B C 2017 03 22 15 00 00 obj1 value a other 1 2017 03 22 14 00 00 obj2 value ns oth
  • Jenkins 管道:kubectl:未找到

    我有以下 Jenkinsfile node stage Apply Kubernetes files withKubeConfig credentialsId jenkins deployer serverUrl https 192 168
  • 当 AngularJS 控制器加载时运行一次

    我有一些事情只需要在控制器加载时完成一次 最好的方法是什么 我读过一些有关 运行块 的内容 但我不太明白它是如何工作的 一些伪代码 when app resolove some stuff load a view controllerA C
  • 如何使用 SnakeYaml 加载自定义对象列表

    我一直在尝试将以下 yaml 反序列化为List
  • Jenkins 蓝海:Maven 看不到 Java

    即使路径存在 我也收到错误 var jenkins home tools hudson model JDK jdk8 bin java 未找到 edi debatcher master LNI22Y2C5V3VECCBCFPVB3ZUWJJ
  • 如何检查双精度数是否可以放入浮点数而不转换为无穷大

    是否有一种标准方法来检查 64 位浮点数是否可以转换为 32 位浮点数而不转换为 Infinity 我知道事后可以检查 Inf Convert ToSingle 不会这样做 为了测试是否double value d将转换为float在不产生
  • 如何强制 PhpMailer 5.2 使用 TLS 1.2

    最近我使用的第三方电子邮件服务提供商发生了变化 他们禁用了对 TLS 1 0 和 TLS 1 1 的支持 我为仍然使用 php 5 3 和 phpmailer 5 2 的古老系统提供支持 我的测试表明 TLS 1 2 已启用 但是 禁用 T
  • 使用带有自定义键的 HashMap

    快速问题 如果我想使用HashMap以自定义类为键 must我覆盖hashCode功能 如果我不重写该函数 它将如何工作 如果您不覆盖 hashCode AND equals 您将获得默认行为 即每个对象都是不同的 无论其内容如何
  • WF4 InstancePersistenceCommand 中断

    我有一个 Windows 服务 正在运行工作流程 工作流程是从数据库加载的 XAML 用户可以使用重新托管的设计器定义自己的工作流程 它配置有一个 SQLWorkflowInstanceStore 实例 以便在空闲时保留工作流 它基本上源自