代码改变世界

《WF编程》系列之45 - 承载工作流:持久化与跟踪

  Windie Chai  阅读(5001)  评论(15编辑  收藏  举报
SQL持久化和跟踪服务分别为工作流状态和跟踪信息提供了持久的存储。但是,它们并没有一起工作。具体来说,每个服务都会使用不同的数据库连接来进行操作。工作流Runtime也因此会使用多个数据库连接。如果跟踪服务开启了事务支持,则会导致额外的开销出现。当事务跨越多个连接时,微软分布式事务协调程序(Microsoft Distributed Transaction Coordinator,MSDTC)会接受事务的管理。MSDTC也会造成一些开销。WF为同时使用了SQL持久化和SQL跟踪服务的应用程序提供了优化方案:SharedConnectionWorkflowCommitWorkBatchService类。这个服务允许两个SQL服务共享一个连接(前提是这两个SQL服务的连接字符串是相同的)。

6.5.1 共享连接的配置

下面的配置文件配置了SQL工作流服务和共享连接服务。因为我们把连接字符串定义在了CommonParameters节中,所以所有的服务都会使用这个连接字符串。
复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
  
<section name="WorkflowConfiguration"
  type
="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  
</configSections>
  
<WorkflowConfiguration>
  
<CommonParameters>
  
<add name="ConnectionString" value="Data Source=(local);Initial Catalog=WorkflowDB;Integrated Security=true"/>
  
</CommonParameters>
  
<Services>
  
<add type="System.Workflow.Runtime.Tracking.SqlTrackingService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  
<add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
  UnloadOnIdle
="true" />
  
<add type= "System.Workflow.Runtime.Hosting.SharedConnectionWorkflowCommitWorkBatchService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  
</Services>
  
</WorkflowConfiguration>
</configuration>
复制代码
我们不需要更改我们的应用程序,共享连接服务会在后台和其它Runtime服务一起协调。

6.6 小结

本章回顾了Windows Workflow Runtime的一些功能。我们分析了如何通过订阅Runtime事件和配置跟踪信息来监视工作流Runtime,还分析了如何通过添加服务来定制Runtime。这些服务包括调度服务(用作管理线程)、持久化服务(用作管理状态)和跟踪服务(用作记录跟踪信息)。如果内置的服务并不能完全满足你的需求,我们可以自己编写服务来替换掉它们。这中架构给予了Windows Workflow Runtime很大的灵活性和扩展性。


译者注:
终于译完了第六章,这才发现MSDN已经更新了WF部分中文资源,许多词语也终于有了官方译法,比如之前我一直译作“持久化”的“Persistence”,官方译作了“持久性”,虽然我个人还是认为持久化更加形象,但日后的翻译还是以官方的为准,之前翻译好的部分,也就不再做更新了,相信也不会给大家的阅读造成太大的影响。
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示