快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

ASP.NET创建XML Web服务全接触(13)

使用事务

    

 支持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#]
<%@ WebService Language=\"C#\" Class=\"Orders\" %>
[Visual Basic]
<%@ WebService Language=\"VB\" Class=\"Orders\" %>


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

<%@ Assembly name=\"System.EnterpriseServices,Version=1.0.3300.0,

Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" %>

  添加引用到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#]
<%@ 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;

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]
<%@ WebService Language=\"VB\" Class=\"Orders\" %>
<%@ assembly name=\"System.EnterpriseServices\" %>

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Imports System.Web.Util
Imports System.EnterpriseServices

Public Class Orders

<WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _
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

 

 


返回类别: 教程
上一教程: 新iNet软件使微软.Net服务能够支持Java
下一教程: 当你的Studio.NET出现"Automation Server Cannot Create Object"时,禁止添加页面及类文件时的解决方案~~

您可以阅读与"ASP.NET创建XML Web服务全接触(13)"相关的教程:
· ASP.NET创建XML Web服务全接触(8)
· ASP.NET创建XML Web服务全接触(7)
· ASP.NET创建XML Web服务全接触(3)
· ASP.NET创建XML Web服务全接触(9)
· ASP.NET创建XML Web服务全接触(12)
    微笑服务 优质保证 索取样品