ASP.NET的XML Web服务方法

开发 后端
本文介绍ASP.NET支持XML Web服务方法的事务利用公共语言运行期中的支持,其是基于Microsoft Transaction Server ( MTS)和COM+ Services中相同的分布式事务模型。

ASP.NET支持XML Web服务方法的事务利用公共语言运行期中的支持,其是基于Microsoft Transaction Server ( MTS)和COM+ Services中相同的分布式事务模型。该模型基于明确的判断一个对象是否参与一个事务,而不是编写特定的代码用来处理委托和回调一个事务。对于一个使用ASP.NET创建的XML Web服务,你可以通过设置其应用到一个XML Web服务方法上的WebMethod属性的TransactionOption属性来声明一个XML Web服务的事务行为。如果该XML Web服务方法执行的时候抛出一个异常,那么该事务自动地结束;相反,如果没有发生异常,该事务自动委托。

WebMethod属性的TransactionOption属性规定一个XML Web服务方法如何参与一个事务。虽然这个声明级别表示一个事务逻辑,但是它是消除实际事务的一个步骤。当事物对象访问数据源(如数据库或消息队列)时实际事务产生。关联该对象的事务自动流向适当的资源管理程序。像.NET Framework Data Provider(用于SQL Server或OLE DB)这样的.NET Framework数据提供者在对象的上下文中查找事务并通过Distributed Transaction Coordinator (DTC,分布式事务协调程序)编目事务。全部的事务自动产生。

XML Web服务方法只能参与一个作为新事务的根的事务。作为一个新事务的根,所有的与资源管理器(像运行Microsoft SQL Server、Microsoft Message Queuing和Microsoft Host Integration Server的服务器)的相互作用维护需要运行健壮的分布式应用程序的ACID性质。调用其他的XML Web服务方法的XML Web服务方法参与不同的事务,因为事务不流经XML Web服务方法。

ASP.NET使用来自XML Web服务方法的事务
声明一个XML Web服务。

  1. <%@WebServiceLanguage="C#"Class="Orders"%> 
  2. <%@Assemblyname="System.EnterpriseServices,Version=1.0.3300.0,
    Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
    %> 
  3. usingSystem;  
  4. usingSystem.Data;  
  5. usingSystem.Data.SqlClient;  
  6. usingSystem.Web.Services;  
  7. usingSystem.EnterpriseServices;  
  8.  
  9. publicclassOrders:WebService  
  10. {  
  11. [WebMethod(TransactionOptionTransactionOption=TransactionOption.RequiresNew)]  
  12. publicintDeleteAuthor(stringlastName)  
  13. {  
  14. StringdeleteCmd="DELETEFROMauthorsWHEREau_lname='"+  
  15. lastName+"'";  
  16. StringexceptionCausingCmdSQL="DELETEFROMNonExistingTableWHERE  
  17. au_lname='"+lastName+"'";  
  18.  
  19. SqlConnectionsqlConn=newSqlConnection(  
  20. "PersistSecurityInfo=False;IntegratedSecurity=SSPI;database=pubs;server=myserver");  
  21.  
  22. SqlCommanddeleteCmd=newSqlCommand(deleteCmdSQL,sqlConn);  
  23. SqlCommandexceptionCausingCmd=new 
  24. SqlCommand(exceptionCausingCmdSQL,sqlConn);  
  25.  
  26. //Thiscommandshouldexecuteproperly.  
  27. deleteCmd.Connection.Open();  
  28. deleteCmd.ExecuteNonQuery();  
  29.  
  30. //Thiscommandresultsinanexception,sothefirstcommandis  
  31. //automaticallyrolledback.SincetheXMLWebservicemethodis  
  32. //participatinginatransaction,andanexceptionoccurs,ASP.NET  
  33. //automaticallyabortsthetransaction.ThedeleteCmdthat  
  34. //executedproperlyisrolledback.  
  35.  
  36. intcmdResult=exceptionCausingCmd.ExecuteNonQuery();  
  37.  
  38. sqlConn.Close();  
  39.  
  40. returncmdResult;  
  41. }  
  42. }  
  43. [VisualBasic]  
  44. <%@WebServiceLanguage="VB"Class="Orders"%> 
  45. <%@assemblyname="System.EnterpriseServices"%> 
  46.  
  47. ImportsSystem  
  48. ImportsSystem.Data  
  49. ImportsSystem.Data.SqlClient  
  50. ImportsSystem.Web.Services  
  51. ImportsSystem.Web.Util  
  52. ImportsSystem.EnterpriseServices  
  53.  
  54. PublicClassOrders  
  55.  
  56. <WebMethod(TransactionOptionTransactionOption:=TransactionOption.RequiresNew)>_  
  57. PublicFunctionDeleteAuthor(lastNameasString)asInteger  
  58.  
  59. DimdeleteCmdSQLAsString="DELETEFROMauthorsWHEREau_lname='"+_  
  60. lastName+"'"  
  61. DimexceptionCausingCmdSQLAsString="DELETEFROM"+_  
  62. "NonExistingTableWHEREau_lname='"+lastName+"'"  
  63.  
  64. DimsqlConnAsSqlConnection=NewSqlConnection(_  
  65. "PersistSecurityInfo=False;IntegratedSecurity=SSPI;database=pubs;server=myserver")  
  66.  
  67. DimdeleteCmdAsSqlCommand=NewSqlCommand(deleteCmdSQL,sqlConn)  
  68. DimexceptionCausingCmdAsSqlCommand=New_ 
  69. SqlCommand(exceptionCausingCmdSQL,sqlConn)  
  70.  
  71. 'Thiscommandshouldexecuteproperly.  
  72. deleteCmd.Connection.Open()  
  73. deleteCmd.ExecuteNonQuery()  
  74.  
  75. 'Thiscommandresultsinanexception,sothefirstcommandis  
  76. 'automaticallyrolledback.SincetheXMLWebservicemethodis  
  77. 'participatinginatransaction,andanexceptionoccurs,ASP.NET  
  78. 'automaticallyabortsthetransaction.ThedeleteCmdthat  
  79. 'executedproperlyisrolledback.  
  80.  
  81. DimcmdResultAsInteger=exceptionCausingCmd.ExecuteNonQuery()  
  82. sqlConn.Close()  
  83.  
  84. ReturncmdResult  
  85. EndFunction  
  86. EndClass 

【编辑推荐】

  1. ASP.NET页面显示XML数据
  2. 了解什么是IFRAME ASP.NET
  3. ASP.NET生命周期的展示
  4. 解决ASP.NET AJAX脚本的错误问题
  5. 详解ASP.NET应用程序
责任编辑:佚名 来源: 51cto博客
相关推荐

2009-07-23 15:18:30

创建XML Web服务ASP.NET

2009-07-28 16:29:06

XML Web服务ASP.NET构造

2009-07-28 17:34:28

ASP.NET XML

2009-07-28 17:28:49

XML Web服务使用ASP.NET

2009-07-28 15:53:43

ASP.NET Web

2009-07-23 16:44:50

XML Web服务使用ASP.NET构造

2009-07-28 14:40:15

XML数据ASP.NET

2009-07-24 16:05:05

调用Web ServiASP.NET

2009-07-27 14:46:16

XML和ASP.NET

2009-09-04 13:11:25

ASP.NET生成XM

2009-12-25 10:36:10

ASP.NET 和 X

2009-08-28 09:58:20

ASP.NET Web

2010-03-12 09:38:58

2009-07-23 14:08:58

2009-07-28 13:26:34

Render方法ASP.NET

2009-08-03 17:35:07

ASP.NET WebASP.NET编程工具

2009-07-28 10:43:23

Web服务器ASP.NET

2011-07-06 13:41:06

ASP.NET

2014-07-31 09:28:09

ASP.NETWeb API

2009-07-29 17:16:47

点赞
收藏

51CTO技术栈公众号