关于WCF事物处理揭秘

开发 后端
在我们的编程中往往会遇到事物的问题,这里就解决WCF事物处理问题概括总结了一些,希望对大家有帮助。

在我们的程序中,无论是JAVA也好,还是C也好,最不好处理的就是关于事物,本人比较关注WCF,现在就一起分析一下关于WCF事物处理的方案吧!单纯的事务存在着下面三个问题
1) 脏读:简单的说就是事务一在某一时刻更改了数据,恰恰这个更改的数据被事务二读取,而事务一却最终失败,导致数据回滚,那事务二就是一个受骗者
2) 非可重复性读取:同一数据每次读取的结果都不一样就是非可重复读取。比如事务一要读取的数据务二改变,这就是非可重复性读取
3) 幻读:很简单,比如事务一在查询数据中,事务二却插入了一个符合查询条件的数据,这样就造成新插入数据的幻读。

三种WCF事物处理问题的解释可能比较难于理解,其实简单的说,脏读是读了别人正在更改的数据,而可重复读取是更改了别人正在读的数据,而幻读呢则是读了别人还未来得及插入,更改或者删除的数据,我想这样理解就简单多了。针对上面不同的问题,可以设置事务的不同隔离方式来防止问题的发生,事务的隔离方式又包括
1) Any: 组件的隔离级别是从调用组件的隔离级别获得的。如果组件是根组件,则隔离级别用于 Serializable 中。
2) ReadUncommitted:读取未提交数据,该方式在读取数据时保持共享锁定以避免读取已修改的数据,但在事务结束前可以更改这些数据,这导致非可重复读取或幻读。
3) ReadCommitted:读取提交数据, 发出共享锁定并允许非独占方式的锁定。该方式与读取未提交数据相相似,这种方式看似和读取未提交数据相似,但有一个区别,事务的只读锁在移到下一行的时候,会解锁,而写入锁却只有在事务完成或者被中止后才解锁,事务要等待所有写入锁解锁。
4) RepeatableRead:可重复性读取,与读取提交数据相似,在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止非可重复读取,但幻读行仍有可能发生。该方式是只读锁也要等到事务结束或者中止才解除
5) Serializable:在完成事务前防止更新或插入。

从上面的描述看,几种隔离方式比较难于区分,WCF事物处理是很难的一件事,但是记住这些更方便的了解隔离方式

隔离级别

ReadUncommitted

ReadCommitted

RepeatableRead

Serializable

脏读

Yes

No

No

No

非可重复性读取

Yes

Yes

No

No

幻读

Yes

Yes

Yes

No

从上表可以看出隔离方式除了Any之外,一级比一级严厉。Any是一脉相承的,如果它没有可继承的,它将是最严厉的Serializable

责任编辑:田树 来源: 博客
相关推荐

2009-11-06 13:23:27

WCF模式

2009-11-06 15:47:17

WCF Windows

2009-12-07 18:47:16

WCF流

2009-11-09 13:12:14

WCF事物操作

2009-11-06 15:25:25

WCF异常

2009-11-06 12:29:23

2009-11-06 14:40:34

WCF REST架构

2010-03-01 15:51:01

WCF限流

2009-12-07 18:33:31

WCF Service

2009-11-09 16:44:18

WCF Service

2009-11-09 17:55:13

WCF缓存

2009-11-06 11:07:52

WCF事务属性

2009-11-06 14:25:56

WCF接口

2009-11-05 14:03:57

WCF承载环境

2010-02-22 10:01:11

WCF消息处理

2010-02-22 13:35:03

WCF异常处理

2009-11-06 16:22:35

WCF协定

2009-11-09 13:47:22

WCF Stream操

2009-11-05 16:21:51

WCF服务

2009-11-05 12:45:25

WCF异常
点赞
收藏

51CTO技术栈公众号