Freigeben über


Automatische Transaktionen und XML-Webdienste

ASP.NET bietet integrierte Unterstützung für das Erstellen und Verfügbarmachen von XML-Webdiensten über ein abstraktes Programmmodell, das konsistent und für Web Forms-Entwickler leicht verständlich ist. Das resultierende Modell ist skalierbar, erweiterbar und integriert u. a. die offenen Internetstandards HTTP, XML, SOAP und WSDL. Durch die Unterstützung offener Standards können beliebige Clients und Internetgeräte auf die XML-Webdienste zugreifen und diese nutzen.

XML-Webdienste bieten die Möglichkeit, Code innerhalb des Gültigkeitsbereichs einer automatischen Transaktion auszuführen. Über Transaktionen wird gewährleistet, dass bei jeder Interaktion mit Ressourcen-Managern wie SQL Server, Message Queuing, Oracle-Servern und SNA-Servern die erforderlichen ACID-Eigenschaften für eine zuverlässige Ausführung verteilter Anwendungen eingehalten werden.

Eine automatische Transaktion kann mit Hilfe der TransactionOption-Eigenschaft der WebMethodAttribute-Attributklasse deklariert werden. Durch Setzen der TransactionOption-Eigenschaft auf TransactionOption.RequiresNew beginnt jedesmal eine neue Transaktion, wenn durch einen XML-Webdienstclient eine XML-Webdienstmethode aufgerufen wird.

Der folgende Codeausschnitt zeigt einen Dienst, der eine einzelne XML-Webdienstmethode mit der Bezeichnung DeleteAuthor verfügbar macht. Diese XML-Webdienstmethode führt eine Datenbankoperation innerhalb des Gültigkeitsbereichs einer automatischen Transaktion durch.

<%@ 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
   Inherits WebService
   
   <WebMethod(TransactionOption := TransactionOption.RequiresNew)> _
Public Function DeleteAuthor(lastName As String) As Integer

      Dim deleteCmd As [String] = "DELETE FROM authors2 where au_lname='" 
         & lastName & "'"
      Dim sqlConn As New SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver")
      Dim myCommand As New SqlCommand(deleteCmd, sqlConn)

      ' If a XML Web service method is participating in a transaction and 
      ' an exception occurs, ASP.NET automatically aborts the transaction.
      ' Likewise, if no exception occurs, then the transaction is
      ' automatically committed.
      myCommand.Connection.Open()
      Return myCommand.ExecuteNonQuery()
   End Function
End Class
[C#]
<%@ WebService Language="C#" Class="Orders" %>
<%@ assembly name="System.EnterpriseServices" %>

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web.Util;
using System.EnterpriseServices;

public class Orders : WebService 
  {
     [ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
     public int DeleteAuthor(string lastName)  
     {
       String deleteCmd = "DELETE FROM authors2 
          where au_lname='" + lastName + "'" ;
    
         SqlConnection sqlConn = new SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver");
         SqlCommand myCommand = new SqlCommand(deleteCmd,sqlConn);

   // If a XML Web service method is participating in a transaction and an 
   // exception occurs, ASP.NET automatically aborts the transaction.
   // Likewise, if no exception occurs, then the transaction is
   // automatically  committed.

         myCommand.Connection.Open();
      return myCommand.ExecuteNonQuery();
     }
}

Hinweis   Eine Transaktion wird nur begonnen, wenn die aktivierende XML-Webdienstmethode, also die vom Client aufgerufene Methode, über Transaktionsmetadaten verfügt. Wenn die aktivierende XML-Webdienstmethode nicht über die richtigen Transaktionsmetadaten verfügt, können nachfolgende XML-Webdienstmethoden sich nicht an einer vorhandenen Transaktion beteiligen und keine neue Transaktion beginnen.

Siehe auch

Automatische Transaktionen | Verteilte Transaktionen | Teilnehmen an Transaktionen in mit ASP.NET erstellten XML-Webdiensten