日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
WCF分布事務(wù)保證數(shù)據(jù)完整性

我們作為一個(gè)開(kāi)發(fā)人員,應(yīng)該能夠順應(yīng)技術(shù)的不斷發(fā)展,不斷的去掌握新技術(shù)。那么,對(duì)于WCF的掌握,就是其中一個(gè)非常重要的技能掌握。WCF分布事務(wù)提供了良好的支持,這使得我們可以協(xié)調(diào)多個(gè)服務(wù)之間的數(shù)據(jù)完整性。通過(guò) TransactionFlowAttribute、ServiceBehaviorAttribute 和 OperationBehaviorAttribute 這三個(gè)特性,我們可以很好地控制事務(wù)的相關(guān)細(xì)節(jié)。#t#

成都創(chuàng)新互聯(lián)主營(yíng)鎮(zhèn)坪網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā),鎮(zhèn)坪h5成都小程序開(kāi)發(fā)搭建,鎮(zhèn)坪網(wǎng)站營(yíng)銷(xiāo)推廣歡迎鎮(zhèn)坪等地區(qū)企業(yè)咨詢(xún)

TransactionFlowAttribute 的構(gòu)造參數(shù) "TransactionFlowOption transactions" 允許我們?cè)趶?qiáng)制事務(wù)(Mandatory)、允許參與事務(wù)(Allowed)和禁止事務(wù)(NotAllowed)間進(jìn)行選擇。

ServiceBehaviorAttribute 提供了多個(gè)屬性參與事務(wù)控制。TransactionAutoCompleteOnSessionClose 指示當(dāng)會(huì)話(huà)(Session)結(jié)束時(shí)是否自動(dòng)提交事務(wù)(Complete); ReleaseServiceInstanceOnTransactionComplete 指示事務(wù)提交后是否釋放服務(wù)實(shí)例對(duì)象; TransactionIsolationLevel 用于設(shè)置事務(wù)隔離方式(isolation level); TransactionTimeout 用于設(shè)置事務(wù)超時(shí)時(shí)間。

OperationBehaviorAttribute 的 TransactionScopeRequired 屬性是 WCF分布事務(wù)所必需使用的,它表明服務(wù)方法必須在事務(wù)范圍(transaction scope)內(nèi)執(zhí)行。如果不添加該標(biāo)記,則意味著服務(wù)方法不參與到事務(wù)中。TransactionAutoComplete 指示方法正常結(jié)束后自動(dòng)提交事務(wù)。

上面這些特性屬性的使用有些特殊的細(xì)節(jié)要求,本文只是做個(gè)簡(jiǎn)要的說(shuō)明,有關(guān)更多內(nèi)容,請(qǐng)參考 MSDN 幫助文檔。

演示

下面的代碼中,我們使用新的程序域來(lái)模擬兩個(gè)服務(wù),客戶(hù)端通過(guò) TransactionScope 來(lái)完成WCF分布事務(wù)調(diào)用。

步驟:

1. 使用 TransactionFlowAttribute 對(duì)契約方法進(jìn)行標(biāo)注,啟用事務(wù)。

2. 使用 OperationBehaviorAttribute 對(duì)服務(wù)方法進(jìn)行標(biāo)注,使用事務(wù)。

3. 將所有 Binding.TransactionFlow 設(shè)置為 true。

 
 
 
  1. [ServiceContract]  
  2. public interface IContract  
  3. {  
  4. [OperationContract]  
  5. [TransactionFlow(TransactionFlowOption.Mandatory)]  
  6. void Test();  
  7. }  
  8. public class MyService : IContract  
  9. {  
  10. [OperationBehavior(TransactionScopeRequired=true)]  
  11. public void Test()  
  12. {  
  13. string connStr = "Data Source=(local);Initial Catalog=tempdb;
    Integrated Security=True";  
  14. using (SqlConnection conn = new SqlConnection(connStr))  
  15. {  
  16. conn.Open();  
  17. SqlCommand cmd = conn.CreateCommand();  
  18. cmd.CommandText = String.Format("insert into table{0} 
    ([name]) values ('name1')",   
  19. AppDomain.CurrentDomain.FriendlyName == "Server1" ? "1" : "2");  
  20. cmd.ExecuteNonQuery();  
  21. }  
  22. }  
  23. }  
  24. public class WcfTest  
  25. {  
  26. public static void Test()  
  27. {  
  28. AppDomain.CreateDomain("Server1").DoCallBack(delegate  
  29. {  
  30. WSHttpBinding binding = new WSHttpBinding();  
  31. binding.TransactionFlow = true;  
  32. ServiceHost host = new ServiceHost(typeof(MyService));  
  33. host.AddServiceEndpoint(typeof(IContract), binding, 
    "http://localhost:8080/myservice");  
  34. host.Open();  
  35. });  
  36. AppDomain.CreateDomain("Server2").DoCallBack(delegate  
  37. {  
  38. WSHttpBinding binding = new WSHttpBinding();  
  39. binding.TransactionFlow = true;  
  40. ServiceHost host = new ServiceHost(typeof(MyService));  
  41. host.AddServiceEndpoint(typeof(IContract), binding, 
    "http://localhost:8081/myservice");  
  42. host.Open();  
  43. });  
  44. WSHttpBinding bindingx = new WSHttpBinding();  
  45. bindingx.TransactionFlow = true;  
  46. ChannelFactory factory = new 
    ChannelFactory(bindingx,   
  47. "http://localhost:8080/myservice");  
  48. IContract client = factory.CreateChannel();  
  49. ChannelFactory factory2 = 
    new ChannelFactory(bindingx,   
  50. "http://localhost:8081/myservice");  
  51. IContract client2 = factory2.CreateChannel();  
  52. try  
  53. {  
  54. using (TransactionScope scope = new TransactionScope())  
  55. {  
  56. client.Test();  
  57. //throw new Exception();  
  58. client2.Test();  
  59. scope.Complete();  
  60. }  
  61. }  
  62. catch  
  63. {  
  64. }  
  65. factory.Close();  
  66. factory2.Close();  
  67. }  

以上就是對(duì)WCF分布事務(wù)的相關(guān)介紹。


網(wǎng)頁(yè)標(biāo)題:WCF分布事務(wù)保證數(shù)據(jù)完整性
網(wǎng)頁(yè)鏈接:http://www.dlmjj.cn/article/cocdigc.html