工作流中对于事务处理的思考
由于这个engine,需要考虑到COM+/ASP.NET/winform+Webservice,尤其是前者,业务系统的处理,和engine的处理,在事务上是否需要保持一个?咨询了一下ms,答案是不需要。不处理事务,而是按照错误来处理。所以,我写了一段伪码,业务单据的程序,这么修改应该就可以了吧!
public void bill.Save(){
bool enginesuccess = true;
bool billsuccess = true;

try{
db.BeginTransaction();

try{
WorkflowEngine engine = WorkflowEngine.Create();
enginesuccess = engine.TransferSomeData(bill.SomeMethod());// 把数据传递到engine的db中
}

catch(Exception ex){
enginesuccess = false;//false可能是异常造成的,也可能是TransferSomeData方法返回的
}

bill.Save();
db.Commint();
}
catch(Exception ex){
billsuccess = false;// 单据保存失败了
}

if(false == billsuccess && false == enginerror){ // 单据保存失败,工作流engine也失败
db.Rollback();// 业务单据回滚
engine.CancelTransferSomeDataFromEngineDatabase();// 引擎回滚
MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
}
else if(true == billsuccess && false == enginesuccess){ // 单据保存成功,工作流engine失败
// db.Rollback();这句是否需要加上?需要处理吗?
engine.CancelTransferSomeDataFromEngineDatabase();// 引擎回滚
MessageBox.Show(“无法启动工作流实例!请系统管理员进行处理!”);
}
else if(false == billsuccess && true == enginesuccess){ // 单据保存失败,工作流engine成功
db.Rollback(); // 单据回滚
engine.CancelTransferSomeDataFromEnginDatabase();// 引擎回滚
}
}

btw,edit new post的时候,page打开的速度好慢。。。







































btw,edit new post的时候,page打开的速度好慢。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?