談ASP.NET創建Web服務的使用事務_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:談ASP.NET創建XML Web服務全接觸
      XML Web服務描述 XML Web服務基礎結構創建在使用遵循一個公布的服務描述的基于XML的消息的通信的基礎上。服務描述是一個使用WSDL語言的XML語法編寫的XML文檔,定義了XML Web服務能理解的XML Web服務消息格式。服務描述起一個協定的作用,用來定義一個XML Web

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

      _
      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

      分享:談數據結構與算法:C#語言描述 目錄
      目錄 第1章 Collections類、泛型類和Timing類概述 1 1.1 群集的定義 1 1.2 群集的描述 1 1.2.1 直接存取群集 2 1.2.2 順序存取群集 4 1.2.3 層次群集 6 1.2.4 組群集 7 1.3 CollectionBase類 8 1.3.1 用ArrayList實現Collection類 8 1.3.2 定義Collection類

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-07-16
      相關.Net教程