亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

我們一起學習WCF第十篇Wcf中實現事務

2019-11-14 15:50:54
字體:
來源:轉載
供稿:網友

  數據一致性在工作中顯得非常重要,有時候我們庫中出現臟數據導致程序報錯,但是又很難發現這樣的錯誤,所以為了數據的完整性建議在程序中加入事物。

什么是事物:我們都有團隊合作吧,比喻團隊有3個人,a負責設計,b負責前端,c負責后臺,那么他們三個就是一個整體,哪一個人那里出了問題就要被打回。

第一步:我們開始定義個一個接口

[ServiceContract]    public interface IUserInfo {        [OperationContract]        int AddInfo();    }

第二步當然是實現接口了。這個AddInfo需要添加用戶和文章

//使用隱式事務,并把TransactionFlowOption設置為Allowed打開事務流        [OperationBehavior(TransactionAutoComplete = true, TransactionScopeRequired = true)]        [TransactionFlow(TransactionFlowOption.Allowed)]        public int AddInfo()        {            using (TransactionScope transcope = new TransactionScope(TransactionScopeOption.RequiresNew))            {                try                {                    if (AddUser())                    {                        if (!AddArticle())                        {                            Transaction.Current.Rollback();                            return 0;                        }                        else {                            transcope.Complete();                            return 1;                        }                    }                    else {                        Transaction.Current.Rollback();                    }                }                catch (Exception ep)                {                    Transaction.Current.Rollback();                    return 0;                }                return 0;            }        }        /// <summary>        /// 添加用戶        /// </summary>        /// <returns></returns>        public bool AddUser() {            try {                string guid = System.Guid.NewGuid().ToString();                string userName = "zhangsan";                string realName = "張三";                DateTime dateTime = DateTime.Now;                string sql = "insert into MyUser(Id,UserName,RealName,SysDate)values(@Id,@UserName,@RealName,@SysDate)";                SqlParameter[] param = new SqlParameter[]            {                new SqlParameter("@Id",guid),                 new SqlParameter("@UserName",userName),                 new SqlParameter("@RealName",realName),                 new SqlParameter("@SysDate",dateTime)             };                string Conn = ConfigurationManager.ConnectionStrings["dbLink"].ConnectionString;                return SqlHelper.ExecuteNonQuery(Conn, CommandType.Text, sql, param) > 0;            }            catch (Exception) {                return false;            }        }        /// <summary>        /// 文獻信息        /// </summary>        /// <returns></returns>        public bool AddArticle() {            try {                string guid = System.Guid.NewGuid().ToString();                string Title = null;                string Content = "我在測試";                DateTime dateTime = DateTime.Now;                string sql = "insert into Info(Id,Title,Content,SysDate)values(@Id,@Title,@Content,@SysDate)";                SqlParameter[] param = new SqlParameter[]            {                new SqlParameter("@Id",guid),                 new SqlParameter("@Title",Title),                 new SqlParameter("@Content",Content),                 new SqlParameter("@SysDate",dateTime)             };                string Conn = ConfigurationManager.ConnectionStrings["dbLink"].ConnectionString;                return SqlHelper.ExecuteNonQuery(Conn, CommandType.Text, sql, param) > 0;            }            catch (Exception ep)            {                return false;            }        }

注釋1:TransactionAutoComplete=true的時候表示沒有異常的時候自動完成事物范圍

第三步:顯得方法AddArticle()添加不進去庫,我在數據庫中不準為null,看下單元測試

public void AddInfoTest()        {            UserInfoClient.UserInfoClient userInfo=new UserInfoClient.UserInfoClient();            int result = userInfo.AddInfo();            Assert.AreEqual(0, result);        }

效果:

第四步:說明事物我們實現了,但是很多時候我們都是和別的部門或者調用別人的wcf所以需要如果其中任何一方數據出現錯誤就要需要回滾現在我們開始寫第二個wcf接口

接口同上,現在看下方法

public class User : IUser {        //使用隱式事務,并把TransactionFlowOption設置為Allowed打開事務流        [OperationBehavior(TransactionAutoComplete = true, TransactionScopeRequired = true)]        [TransactionFlow(TransactionFlowOption.Allowed)]        public int AddInfo() {            Client.UserInfoClient userInfoClient = new UserInfoClient();            using (TransactionScope transcope = new TransactionScope(TransactionScopeOption.RequiresNew)) {                try {                    if (!AddUser()) {                        Transaction.Current.Rollback();                        return 0;                    }                    if (!AddArticle()) {                        Transaction.Current.Rollback();                        return 0;                    }                    if (userInfoClient.AddInfo() != 1) {                        Transaction.Current.Rollback();                        return 0;                    }                    else {                        transcope.Complete();                        return 1;                    }                }                catch (Exception) {                    Transaction.Current.Rollback();                    userInfoClient.Close();                    return 0;                }            }

其中調用的AddUser()和AddArticle()同上面一樣(這里僅僅為了測試)userInfoClient.AddInfo()這是上一個wcf部署以后的方法

現在我們先看都成功都添加成功(此時成功添加數據庫)

[Test]        public void AddInfoTwoTest()        {            Client.UserClient userClient =new UserClient();            Assert.AreEqual(1, userClient.AddInfo());        }

效果:

 

再看第一個wcf添加失敗第二個回滾的效果

        /// <summary>        /// 測試回滾        /// </summary>        [Test]        public void AddInfoFailTest()        {            Client.UserClient userClient = new UserClient();            Assert.AreEqual(0, userClient.AddInfo());        }

總結:在我們一條數據插入多個表中,或者數據之間有很強的聯系,我們可以考慮用事物老保證數據一致性,但是一定注意記得事物要提交,否則可能會出席死鎖。大家可以動手試試

 源碼下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人在线免费视频| 亚洲永久免费观看| 亚洲男人天堂网| 欧洲中文字幕国产精品| 亚洲一区二区中文字幕| 亚洲精品日韩欧美| 欧美成年人在线观看| 国产成人在线亚洲欧美| 日本一区二区三区四区视频| 亚洲午夜精品视频| 91中文精品字幕在线视频| 人人爽久久涩噜噜噜网站| 国产精品一区二区三区在线播放| 中文字幕国内精品| 欧美黑人巨大xxx极品| 北条麻妃一区二区三区中文字幕| 91香蕉嫩草神马影院在线观看| 国产精品高潮在线| 日本老师69xxx| 国产亚洲欧美日韩美女| 亚洲男人的天堂在线播放| 黄色一区二区在线| 国内成人精品一区| 最近2019中文字幕mv免费看| 久久精品99国产精品酒店日本| 亚洲精品国产综合区久久久久久久| 亚洲精品视频播放| 欧美成人激情视频免费观看| 萌白酱国产一区二区| 中国日韩欧美久久久久久久久| 久久综合久中文字幕青草| 亚洲色图在线观看| 国产精品亚洲精品| 精品国产自在精品国产浪潮| 亚洲欧洲国产一区| 欧美一区二区三区艳史| 国产精品一区二区3区| 久久久精品中文字幕| 日本高清不卡的在线| 亚洲精品乱码久久久久久金桔影视| 亚洲国产中文字幕在线观看| 色www亚洲国产张柏芝| 26uuu日韩精品一区二区| 成人久久一区二区| 国产91精品网站| 亚洲伊人一本大道中文字幕| 久久6免费高清热精品| 久久久免费av| 神马国产精品影院av| 日韩电影免费在线观看中文字幕| 日韩电影免费观看在线观看| 精品成人国产在线观看男人呻吟| 国产亚洲欧美一区| 乱亲女秽乱长久久久| 久久成人一区二区| 亚洲欧美三级伦理| 欧美激情一级欧美精品| 一区二区欧美日韩视频| 国产成+人+综合+亚洲欧洲| 亚洲欧美日韩久久久久久| 91精品在线国产| 亚洲精品视频二区| 国产日韩欧美中文| 国产成+人+综合+亚洲欧洲| 亚洲一区二区中文字幕| 国产成人av在线| 91久久精品国产91性色| 亚洲深夜福利在线| 97在线观看免费| 亚洲精品一区二区三区不| 在线日韩中文字幕| 欧美一区亚洲一区| 日本一区二区在线免费播放| 久久久久久国产三级电影| 亚洲黄色在线看| 一区二区三区四区在线观看视频| 伊人久久久久久久久久久久久| 91精品国产高清久久久久久| 国产精品永久在线| 精品动漫一区二区三区| 亚洲aa在线观看| 丝袜美腿精品国产二区| 91在线高清视频| 色婷婷久久av| 懂色av影视一区二区三区| 国产国语刺激对白av不卡| 麻豆一区二区在线观看| 91色视频在线导航| 国外成人免费在线播放| 国产日韩欧美在线播放| 精品国产欧美一区二区五十路| 91av在线网站| 伊人久久久久久久久久久| 成人久久久久久| 尤物yw午夜国产精品视频明星| 国产精品久久97| 狠狠躁夜夜躁人人爽天天天天97| 夜夜嗨av色一区二区不卡| 91精品久久久久久久久| 久久久极品av| 亚洲日本中文字幕免费在线不卡| 97视频在线观看播放| 欧美激情小视频| 久久影院免费观看| 日韩一区av在线| 久久久久久亚洲精品不卡| 精品国产一区二区三区久久久狼| 亚洲一区二区三区视频| 国产亚洲欧美日韩精品| 色综合老司机第九色激情| 亚洲人成电影网站色www| 亚洲国产精品网站| 亚洲视频999| 欧美日韩亚洲91| 日韩av影片在线观看| 国产成人激情小视频| 国产欧美精品一区二区三区介绍| 91久久精品久久国产性色也91| 亚洲精品免费av| 欧美日韩在线视频一区| 亚洲欧美日韩爽爽影院| 欧美午夜xxx| 色噜噜狠狠狠综合曰曰曰| 欧美日本亚洲视频| 欧美日韩综合视频网址| 国产一区二区三区三区在线观看| 亚洲视频视频在线| 精品亚洲夜色av98在线观看| 日韩在线视频播放| 亚洲日本中文字幕免费在线不卡| 自拍偷拍亚洲在线| 俺也去精品视频在线观看| 5566日本婷婷色中文字幕97| 亚洲成人av在线| 欧美高跟鞋交xxxxxhd| www.欧美精品一二三区| 国产亚洲精品久久久久久777| 日韩精品电影网| 久久精品99国产精品酒店日本| 色婷婷av一区二区三区久久| 午夜精品99久久免费| 日韩av电影在线网| 91精品国产色综合| 成人欧美一区二区三区在线湿哒哒| 久久视频在线视频| 日韩中文字幕在线观看| 欧美裸体视频网站| 亚洲韩国欧洲国产日产av| 亚洲最新视频在线| 麻豆一区二区在线观看| 亚洲国产精品yw在线观看| 激情成人中文字幕| 久久99热精品| 国产欧美日韩免费看aⅴ视频| 91精品中国老女人| 国产精品黄色影片导航在线观看| 久久久爽爽爽美女图片| 欧美日韩中文字幕日韩欧美| 久久人人爽国产| 91久久精品视频| 久久久亚洲国产| 亚洲国产精品久久精品怡红院| 色综合久久久888| 国产精品天天狠天天看|