Partager via


Transactions automatiques et services Web XML

ASP.NET propose une prise en charge intégrée de création et d'exposition de services Web XML en utilisant une abstraction de programmation qui est cohérente et familière à Web Forms. Le modèle qui en résulte est dimensionnable, extensible et accepte les standards Internet ouverts HTTP, XML, SOAP et WSDL entre autres. Grâce à cette prise en charge des standards ouverts, les services Web XML sont accessibles et utilisables par tout client ou périphérique activé pour Internet.

Les services Web XML vous donnent la possibilité d'exécuter votre code dans le cadre d'une transaction automatique. Une transaction assure que toutes les interactions avec les gestionnaires de ressources (serveurs SQL, Message Queuing, Oracle et SNA) conservent les propriétés ACID nécessaires pour exécuter des applications distribuées robustes.

Vous pouvez déclarer une transaction automatique à l'aide de la propriété TransactionOption de la classe d'attribut WebMethod. Lorsque vous donnez à la propriété TransactionOption la valeur TransactionOption.RequiresNew, une nouvelle transaction commence chaque fois qu'un client de service Web XML appelle la méthode du service Web XML.

Le fragment de code suivant illustre un service qui expose une seule méthode de service Web XML appelée DeleteAuthor. Cette méthode de service Web XML exécute une opération de base de données dans le cadre d'une transaction automatique.

<%@ 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();
     }
}

Remarque   Une transaction débute uniquement lorsque la méthode de service Web XML qui l'active (méthode appelée à partir du client) possède des métadonnées de transaction. Si la méthode d'activation du service Web XML ne comporte pas les métadonnées de transaction appropriées, les méthodes de service Web XML suivantes ne peuvent ni participer à une transaction existante, ni commencer une nouvelle transaction.

Voir aussi

Transactions automatiques | Transactions distribuées | Participation aux transactions dans les services Web XML créés à l'aide d'ASP.NET