支持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服务方法。 使用来自XML Web服务方法的事务 声明一个XML Web服务。 [C#] 把一个汇编指令加到System.EnterpriseServices上。 <%@ Assembly name=”System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a” %> 添加引用到System.Web.Services和System.EnterpriseServices域名空间。 [C#] 声明一个XML Web服务方法,设置WebMethod属性的TransactionOption属性为TransactionOption.RequiresNew。 [C#] 下面的代码示例显示一个使用单个XML Web服务方法的XML Web服务,调用DeleteDatabase。这个XML Web服务方法执行一个事务范围内的数据库操作。如果该数据库操作抛出一个异常,该事务自动地停止;否则,该事务自动地委托。 [C#] public class Orders : WebService SqlConnection sqlConn = new SqlConnection( SqlCommand deleteCmd = new SqlCommand(deleteCmdSQL,sqlConn); // This command should execute properly. // This command results in an exception, so the first command is int cmdResult = exceptionCausingCmd.ExecuteNonQuery(); sqlConn.Close(); return cmdResult; Imports System Public Class Orders <WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _ Dim deleteCmdSQL As String = “DELETE FROM authors WHERE au_lname=” + _ Dim sqlConn As SqlConnection = New SqlConnection( _ Dim deleteCmd As SqlCommand = New SqlCommand(deleteCmdSQL,sqlConn) This command should execute properly. This command results in an exception, so the first command is Dim cmdResult As Integer = exceptionCausingCmd.ExecuteNonQuery() Return cmdResult
<%@ WebService Language=”C#” Class=”Orders” %>
[Visual Basic]
<%@ WebService Language=”VB” Class=”Orders” %>
using System.Web.Services;
using System.EnterpriseServices;
[Visual Basic]
Imports System.Web.Services
Imports System.EnterpriseServices
[ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
public int DeleteAuthor(string lastName)
[Visual Basic]
< WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _
Public Function DeleteAuthor(lastName As String) As Integer
<%@ WebService Language=”C#” Class=”Orders” %>
<%@ Assembly name=”System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a” %>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
using System.EnterpriseServices;
{
[ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
public int DeleteAuthor(string lastName)
{
String deleteCmd = “DELETE FROM authors WHERE au_lname=” +
lastName + “” ;
String exceptionCausingCmdSQL = “DELETE FROM NonExistingTable WHERE
au_lname=” + lastName + “” ;
“Persist Security Info=False;Integrated Security=SSPI;database=pubs;server=myserver”);
SqlCommand exceptionCausingCmd = new
SqlCommand(exceptionCausingCmdSQL,sqlConn);
deleteCmd.Connection.Open();
deleteCmd.ExecuteNonQuery();
// automatically rolled back. Since the XML Web service method is
// participating in a transaction, and an exception occurs, ASP.NET
// automatically aborts the transaction. The deleteCmd that
// executed properly is rolled back.
}
}
[Visual Basic]
<%@ WebService Language=”VB” Class=”Orders” %>
<%@ assembly name=”System.EnterpriseServices” %>
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Imports System.Web.Util
Imports System.EnterpriseServices
Public Function DeleteAuthor (lastName as String) as Integer
lastName + “”
Dim exceptionCausingCmdSQL As String = “DELETE FROM ” + _
“NonExistingTable WHERE au_lname=” + lastName + “”
“Persist Security Info=False;Integrated Security=SSPI;database=pubs;server=myserver”)
Dim exceptionCausingCmd As SqlCommand = New _
SqlCommand(exceptionCausingCmdSQL,sqlConn)
deleteCmd.Connection.Open()
deleteCmd.ExecuteNonQuery()
automatically rolled back. Since the XML Web service method is
participating in a transaction, and an exception occurs, ASP.NET
automatically aborts the transaction. The deleteCmd that
executed properly is rolled back.
sqlConn.Close()
End Function
End Class
asp.net创建web服务之使用事务_asp.net技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » asp.net创建web服务之使用事务_asp.net技巧
相关推荐
-      对.net framework 反射的反思_asp.net技巧
-      .net3.5和vs2008中的asp.net ajax_asp.net技巧
-      使用asp.net ajax框架扩展html map控件_asp.net技巧
-      asp.net应用程序资源访问安全模型_asp.net技巧
-      photoshop初学者轻松绘制螺旋漩涡特效_photoshop教程
-      photoshop通道结合图层模式抠狗尾巴草_photoshop教程
-      web.config详解+asp.net优化_asp.net技巧
-      asp.net中多彩下拉框的实现_asp.net技巧