談ASP.NET創(chuàng)建Web服務(wù)的使用事務(wù)_.Net教程
推薦:談ASP.NET創(chuàng)建XML Web服務(wù)全接觸XML Web服務(wù)描述 XML Web服務(wù)基礎(chǔ)結(jié)構(gòu)創(chuàng)建在使用遵循一個(gè)公布的服務(wù)描述的基于XML的消息的通信的基礎(chǔ)上。服務(wù)描述是一個(gè)使用WSDL語(yǔ)言的XML語(yǔ)法編寫(xiě)的XML文檔,定義了XML Web服務(wù)能理解的XML Web服務(wù)消息格式。服務(wù)描述起一個(gè)協(xié)定的作用,用來(lái)定義一個(gè)XML Web
支持XML Web服務(wù)的事務(wù)利用公共語(yǔ)言運(yùn)行期中的支持,其是基于Microsoft Transaction Server ( MTS)和COM Services中相同的分布式事務(wù)模型。該模型基于明確的判斷一個(gè)對(duì)象是否參與一個(gè)事務(wù),而不是編寫(xiě)特定的代碼用來(lái)處理委托和回調(diào)一個(gè)事務(wù)。對(duì)于一個(gè)使用ASP.NET創(chuàng)建的XML Web服務(wù),你可以通過(guò)設(shè)置其應(yīng)用到一個(gè)XML Web服務(wù)方法上的WebMethod屬性的TransactionOption屬性來(lái)聲明一個(gè)XML Web服務(wù)的事務(wù)行為。如果該XML Web服務(wù)方法執(zhí)行的時(shí)候拋出一個(gè)異常,那么該事務(wù)自動(dòng)地結(jié)束;相反,如果沒(méi)有發(fā)生異常,該事務(wù)自動(dòng)委托。
WebMethod屬性的TransactionOption屬性規(guī)定一個(gè)XML Web服務(wù)方法如何參與一個(gè)事務(wù)。雖然這個(gè)聲明級(jí)別表示一個(gè)事務(wù)邏輯,但是它是消除實(shí)際事務(wù)的一個(gè)步驟。當(dāng)事物對(duì)象訪問(wèn)數(shù)據(jù)源(如數(shù)據(jù)庫(kù)或消息隊(duì)列)時(shí)實(shí)際事務(wù)產(chǎn)生。關(guān)聯(lián)該對(duì)象的事務(wù)自動(dòng)流向適當(dāng)?shù)馁Y源管理程序。像.NET Framework Data Provider(用于SQL Server或OLE DB)這樣的.NET Framework數(shù)據(jù)提供者在對(duì)象的上下文中查找事務(wù)并通過(guò)Distributed Transaction Coordinator (DTC,分布式事務(wù)協(xié)調(diào)程序)編目事務(wù)。全部的事務(wù)自動(dòng)產(chǎn)生。
XML Web服務(wù)方法只能參與一個(gè)作為新事務(wù)的根的事務(wù)。作為一個(gè)新事務(wù)的根,所有的與資源管理器(像運(yùn)行Microsoft SQL Server、Microsoft Message Queuing和Microsoft Host Integration Server的服務(wù)器)的相互作用維護(hù)需要運(yùn)行健壯的分布式應(yīng)用程序的ACID性質(zhì)。調(diào)用其他的XML Web服務(wù)方法的XML Web服務(wù)方法參與不同的事務(wù),因?yàn)槭聞?wù)不流經(jīng)XML Web服務(wù)方法。
使用來(lái)自XML Web服務(wù)方法的事務(wù)
聲明一個(gè)XML Web服務(wù)。
[C#]
[Visual Basic]
把一個(gè)匯編指令加到System.EnterpriseServices上。
添加引用到System.Web.Services和System.EnterpriseServices域名空間。
[C#]
using System.Web.Services;
using System.EnterpriseServices;
[Visual Basic]
Imports System.Web.Services
Imports System.EnterpriseServices
聲明一個(gè)XML Web服務(wù)方法,設(shè)置WebMethod屬性的TransactionOption屬性為TransactionOption.RequiresNew。
[C#]
[ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
public int DeleteAuthor(string lastName)
[Visual Basic]
_
Public Function DeleteAuthor(lastName As String) As Integer
下面的代碼示例顯示一個(gè)使用單個(gè)XML Web服務(wù)方法的XML Web服務(wù),調(diào)用DeleteDatabase。這個(gè)XML Web服務(wù)方法執(zhí)行一個(gè)事務(wù)范圍內(nèi)的數(shù)據(jù)庫(kù)操作。如果該數(shù)據(jù)庫(kù)操作拋出一個(gè)異常,該事務(wù)自動(dòng)地停止;否則,該事務(wù)自動(dòng)地委托。
[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
分享:談數(shù)據(jù)結(jié)構(gòu)與算法:C#語(yǔ)言描述 目錄目錄 第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實(shí)現(xiàn)Collection類 8 1.3.2 定義Collection類
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- ASP.NET學(xué)習(xí)篇(2)——安裝與配置
- ASP.NET MVC中解析淘寶網(wǎng)頁(yè)出現(xiàn)亂碼問(wèn)題的解決方法
- 淺談ASP.NET開(kāi)發(fā)下的MVC設(shè)計(jì)模式的實(shí)現(xiàn)
- ASP.NET實(shí)現(xiàn)頁(yè)面間值傳遞的幾種方法
- 您可能不知道的.Net2.0小技巧
- 在ASP.NET程序中創(chuàng)建唯一序號(hào)
- 解讀ASP.NET MVC中必知的13個(gè)擴(kuò)展點(diǎn)
- 解讀.net垃圾回收和CLR 4.0對(duì)垃圾回收所做的改進(jìn)之二
- ASP.NET利用MD.DLL轉(zhuǎn)EXCEL具體實(shí)現(xiàn)
- ASP.NET中的事務(wù)處理和異常處理
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-談ASP.NET創(chuàng)建Web服務(wù)的使用事務(wù)。