日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

wcf系列學(xué)習(xí)5天速成——第三天 事務(wù)的使用

 昵稱10504424 2013-03-14

今天是速成的第三天,再分享一下WCF中比較常用的一種技術(shù),也就是”事務(wù)“。

 

在B2B的項(xiàng)目中,一般用戶注冊(cè)后,就有一個(gè)屬于自己的店鋪,此時(shí),我們就要插入兩張表, User和Shop表。

當(dāng)然,要么插入成功,要么全失敗。

 

第一步: 首先看一下項(xiàng)目的結(jié)構(gòu)圖:

 

第二步: 準(zhǔn)備工作,我們新建Commerce數(shù)據(jù)庫(kù),用EF去映射,然后新建ServiceWCF類庫(kù),具體步驟就省略,

            這一塊不懂可以留言。

 

第三步:新建一個(gè)Model類庫(kù)。建立兩個(gè)實(shí)體類Shop和User,當(dāng)然自定義類型在WCF中傳輸,

           必須在類上加上【DataContract】,屬性上加【DataMember】。

   Shop.cs

  User.cs

 

第四步:然后在ServiceWCF類庫(kù)中新建兩個(gè)文件Seller.cs 和 ISeller.cs.

        ISeller.cs:

     Seller.cs

 1 namespace ServiceWCF
 2 {
 3     public class Seller : ISeller
 4     {
 5         ///<summary>
 6 /// User的插入操作
 7 ///</summary>
 8 ///<param name="user"></param>
 9 ///<param name="userID"></param>
10 ///<returns></returns>
11         public bool Add(Model.User user, out int userID)
12         {
13             using (CommerceEntities db = new CommerceEntities())
14             {
15                 try
16                 {
17                     User userModel = new User()
18                     {
19                         UserName = user.UserName,
20                         Passwrod = user.Password
21                     };
22 
23                     db.User.AddObject(userModel);
24 
25                     db.SaveChanges();
26 
27                     userID = userModel.UserID;
28 
29                     return true;
30                 }
31                 catch (Exception)
32                 {
33                     userID = 0;
34                     throw;
35                 }
36             }
37         }
38 
39         ///<summary>
40 /// Shop的插入操作
41 ///</summary>
42 ///<param name="shop"></param>
43 ///<param name="shopID"></param>
44 ///<returns></returns>
45         public bool Add(Model.Shop shop, out int shopID)
46         {
47             using (CommerceEntities db = new CommerceEntities())
48             {
49                 try
50                 {
51 
52                     Shop shopModel = new Shop()
53                           {
54                               ShopName = shop.ShopName,
55                               ShopUrl = shop.ShopUrl,
56                               UserID = shop.UserID
57                           };
58 
59                     db.Shop.AddObject(shopModel);
60 
61                     db.SaveChanges();
62 
63                     shopID = shopModel.ShopID;
64 
65                     return true;
66                 }
67                 catch (Exception)
68                 {
69                     shopID = 0;
70                     throw;
71                 }
72             }
73         }
74 
75 ///<summary>
76 /// User,Shop的插入的操作
77 ///</summary>
78 ///<param name="user"></param>
79 ///<param name="shop"></param>
80 ///<returns></returns>
81         [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
82         public bool Add(Model.User user, Model.Shop shop)
83         {
84             int shopID;
85             int UserID;
86 
87             //注意,這個(gè)方法操作了兩個(gè)數(shù)據(jù)庫(kù)實(shí)例,為AddUser和AddShop。所以晉升為分布式事務(wù)
88             if (Add(user, out  UserID))
89             {
90                 shop.UserID = UserID;
91 
92                 return Add(shop, out shopID);
93             }
94 
95             return false;
96         }
97     }
98 }

 TransactionScopeRequired: 告訴ServiceHost自托管服務(wù),進(jìn)入我的方法,必須給我加上事務(wù)。

 TransactionAutoComplete:   方法執(zhí)行中,如果沒(méi)有拋出異常,則自動(dòng)提交。

 

第五步: 新建Host來(lái)承載了,配置AppConfig,這些細(xì)節(jié)就不再說(shuō)了。

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <system.web>
 4     <compilation debug="true" />
 5   </system.web>
 6   <!-- 部署服務(wù)庫(kù)項(xiàng)目時(shí),必須將配置文件的內(nèi)容添加到 
 7   主機(jī)的 app.config 文件中。System.Configuration 不支持庫(kù)的配置文件。-->
 8   <system.serviceModel>
 9     <services>
10       <service name="ServiceWCF.Seller">
11         <endpoint address="" binding="wsHttpBinding" contract="ServiceWCF.ISeller">
12           <identity>
13             <dns value="localhost" />
14           </identity>
15         </endpoint>
16         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
17         <host>
18           <baseAddresses>
19             <add baseAddress="http://localhost:8732/Seller/" />
20           </baseAddresses>
21         </host>
22       </service>
23     </services>
24     <behaviors>
25       <serviceBehaviors>
26         <behavior>
27           <!-- 為避免泄漏元數(shù)據(jù)信息,
28           請(qǐng)?jiān)诓渴鹎皩⒁韵轮翟O(shè)置為 false 并刪除上面的元數(shù)據(jù)終結(jié)點(diǎn)  -->
29           <serviceMetadata httpGetEnabled="True" />
30           <!-- 要接收故障異常詳細(xì)信息以進(jìn)行調(diào)試,
31           請(qǐng)將以下值設(shè)置為 true。在部署前設(shè)置為 false 
32             以避免泄漏異常信息-->
33           <serviceDebug includeExceptionDetailInFaults="False" />
34         </behavior>
35       </serviceBehaviors>
36     </behaviors>
37   </system.serviceModel>
38   <connectionStrings>
39     <add name="CommerceEntities" connectionString="metadata=res://*/Commerce.csdl|res://*/Commerce.ssdl|res://*/Commerce.msl;provider=System.Data.SqlClient;provider connection string="Data Source=VONXCEVF0IT7JDJ;Initial Catalog=Commerce;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
40   </connectionStrings>
41 </configuration>


第六步:開(kāi)啟WCF服務(wù),新建ServiceClient類庫(kù),然后用信道生成實(shí)例。

 


最后就是測(cè)試了:

    首先:走正常流程。client.Add方法調(diào)用服務(wù)器端,運(yùn)行效果如圖所示:

  

 

是的,數(shù)據(jù)已經(jīng)正常插入成功,對(duì)Client端而言,這個(gè)操作是透明的。

  

  然后:  我們?cè)赟eller類中的Add方法中故意加入異常??葱Ч印?/a>

 

截圖如下:

 

哈哈,拋出異常了,我的Exception起到效果了,再來(lái)看一下數(shù)據(jù)庫(kù)。大家都知道會(huì)發(fā)生什么了,對(duì)的,異常不再產(chǎn)生數(shù)據(jù)了,

        還是先前產(chǎn)生了那條數(shù)據(jù),說(shuō)明起到效果了。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多