当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET创建Web服务之使用事务

ASP.NET
Visual Studio.Net 内幕(7)
.Net 2.0 原汁原味读取注册表
ASP.NET 2.0中预设的cookie
ASP.NET:一段比较经典的多线程学习代码
ASP.NET2.0服务器控件之自定义状态管理
Asp.net给站点某目录增加Aspnet用户
ASP.NET技巧:请求网址并解析返回的html
在Asp.net用C#建立动态Excel
ASP.NET2.0:页面中链入的CSS、js文件带中文时需注意
ASP.NET技巧:数据岛出到Excel最为简易的方法
第一次用.net2.0 LOGIN登陆控件的困惑和解决方法
在ASP.net中保存/取出图片入/从SQL数据库
ASP.NET技巧:做个DataList可分页的数据源
在.NET中利用委托实现窗体间通信
在.NET2.0中使用自定义事务操作
解决 ASP.NET中目录访问权限的问题
ASP.Net防止刷新自动触发事件的解决方案
白刃之战:PHP vs. ASP.NET(节选)-架构比较
C#中使用SendMessage
提取HTML代码中文字的C#函数

ASP.NET创建Web服务之使用事务


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 102 ::
收藏到网摘: n/a

支持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#]

[Visual Basic]

把一个汇编指令加到System.EnterpriseServices上。

添加引用到System.Web.Services和System.EnterpriseServices域名空间。

[C#]

using System.Web.Services;

using System.EnterpriseServices;

[Visual Basic]

Imports System.Web.Services

Imports System.EnterpriseServices

声明一个XML Web服务方法,设置WebMethod属性的TransactionOption属性为TransactionOption.RequiresNew。

[C#]

[ WebMethod(TransactionOption=TransactionOption.RequiresNew)]

public int DeleteAuthor(string lastName)

[Visual Basic]

< WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _

Public Function DeleteAuthor(lastName As String) As Integer

下面的代码示例显示一个使用单个XML Web服务方法的XML Web服务,调用DeleteDatabase。这个XML Web服务方法执行一个事务范围内的数据库操作。如果该数据库操作抛出一个异常,该事务自动地停止;否则,该事务自动地委托。

[C#]

using System;

using System.Data;

using System.Data.SqlClient;

using System.Web.Services;

using System.EnterpriseServices;

public class Orders : WebService

{

[ 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 + "'" ;

SqlConnection sqlConn = new SqlConnection(

"Persist Security Info=False;Integrated Security=SSPI;database=pubs;server=myserver");

SqlCommand deleteCmd = new SqlCommand(deleteCmdSQL,sqlConn);

SqlCommand exceptionCausingCmd = new

SqlCommand(exceptionCausingCmdSQL,sqlConn);

// This command should execute properly.

deleteCmd.Connection.Open();

deleteCmd.ExecuteNonQuery();

// This command results in an exception, so the first command is

// 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.

int cmdResult = exceptionCausingCmd.ExecuteNonQuery();

sqlConn.Close();

return cmdResult;

}

}

[Visual Basic]

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports System.Web.Services

Imports System.Web.Util

Imports System.EnterpriseServices

Public Class Orders

 

Public Function DeleteAuthor (lastName as String) as Integer

Dim deleteCmdSQL As String = "DELETE FROM authors WHERE au_lname='" + _

lastName + "'"

Dim exceptionCausingCmdSQL As String = "DELETE FROM " + _

"NonExistingTable WHERE au_lname='" + lastName + "'"

Dim sqlConn As SqlConnection = New SqlConnection( _

"Persist Security Info=False;Integrated Security=SSPI;database=pubs;server=myserver")

Dim deleteCmd As SqlCommand = New SqlCommand(deleteCmdSQL,sqlConn)

Dim exceptionCausingCmd As SqlCommand = New _

SqlCommand(exceptionCausingCmdSQL,sqlConn)

' This command should execute properly.

deleteCmd.Connection.Open()

deleteCmd.ExecuteNonQuery()

' This command results in an exception, so the first command is

' 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.

Dim cmdResult As Integer = exceptionCausingCmd.ExecuteNonQuery()

sqlConn.Close()

Return cmdResult

End Function

End Class