• WCF分布式事务


    原文地址:http://developer.51cto.com/art/201002/185426.htm

    我们作为一个开发人员,应该能够顺应技术的不断发展,不断的去掌握新技术。那么,对于WCF的掌握,就是其中一个非常重要的技能掌握。WCF分布事务提供了良好的支持,这使得我们可以协调多个服务之间的数据完整性。通过 TransactionFlowAttribute、ServiceBehaviorAttribute 和 OperationBehaviorAttribute 这三个特性,我们可以很好地控制事务的相关细节。

    TransactionFlowAttribute 的构造参数 "TransactionFlowOption transactions" 允许我们在强制事务(Mandatory)、允许参与事务(Allowed)和禁止事务(NotAllowed)间进行选择。

    ServiceBehaviorAttribute 提供了多个属性参与事务控制。TransactionAutoCompleteOnSessionClose 指示当会话(Session)结束时是否自动提交事务(Complete); ReleaseServiceInstanceOnTransactionComplete 指示事务提交后是否释放服务实例对象; TransactionIsolationLevel 用于设置事务隔离方式(isolation level); TransactionTimeout 用于设置事务超时时间。

    OperationBehaviorAttribute 的 TransactionScopeRequired 属性是 WCF分布事务所必需使用的,它表明服务方法必须在事务范围(transaction scope)内执行。如果不添加该标记,则意味着服务方法不参与到事务中。TransactionAutoComplete 指示方法正常结束后自动提交事务。

    上面这些特性属性的使用有些特殊的细节要求,本文只是做个简要的说明,有关更多内容,请参考 MSDN 帮助文档。

    演示

    下面的代码中,我们使用新的程序域来模拟两个服务,客户端通过 TransactionScope 来完成WCF分布事务调用。

    步骤:

    1. 使用 TransactionFlowAttribute 对契约方法进行标注,启用事务。

    2. 使用 OperationBehaviorAttribute 对服务方法进行标注,使用事务。

    3. 将所有 Binding.TransactionFlow 设置为 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<IContractfactory = new 
      ChannelFactory<IContract>(bindingx,   
    47. "http://localhost:8080/myservice");  
    48. IContract client = factory.CreateChannel();  
    49. ChannelFactory<IContractfactory2 = 
      new ChannelFactory<IContract>(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. }  

    以上就是对WCF分布事务的相关介绍。

  • 相关阅读:
    将文献的bibtex引用格式批量转换为bibitem格式参考文献
    ubuntu下webbench作网站压力测试教程【webbench安装】
    Windows10安装虚拟机VMware并且安装ubuntu16系统
    ubuntu 16.04系统下解决MySQL 的root用户重置密码问题
    elementui 中 日期时间插件 结束时间大于开始时间
    SqlDbType 与 .Net 数据类型对照表
    可用的datatable转换成List<T>
    【beyond compare4 秘钥】亲测4.1.6可用
    winform 自定义控件圆按钮插件
    net framework 4.0 wcf发布到IIS
  • 原文地址:https://www.cnblogs.com/niaowo/p/4707749.html
Copyright © 2020-2023  润新知