Condividi tramite


Transazioni automatiche e servizi Web XML

ASP.NET fornisce il supporto integrato per la creazione e l'esposizione dei servizi Web XML mediante un'astrazione di programmazione coerente e nota rispetto a Web Form. Il modello ottenuto è scalabile ed estendibile e abbraccia, tra gli altri, gli standard Internet aperti HTTP, XML, SOAP e WSDL. Grazie al supporto degli standard aperti, i servizi Web XML sono accessibili e utilizzabili da qualsiasi client o periferica abilitata per Internet.

I servizi Web XML consentono di scegliere se eseguire il codice nell'ambito di una transazione automatica. Le transazioni accertano che tutte le interazioni con i gestori delle risorse, quali server SQL, MSMQ, Oracle ed SNA, rispettino le proprietà ACID indispensabili per l'esecuzione di applicazioni distribuite realmente efficaci.

È possibile dichiarare una transazione automatica utilizzando la proprietà TransactionOption della classe di attributi WebMethodAttribute. L'impostazione della proprietà TransactionOption su TransactionOption.RequiresNew consente di iniziare una nuova transazione a ogni chiamata del metodo del servizio Web XML da parte del client del servizio Web XML.

Nel frammento di codice che segue viene illustrato un servizio che espone un unico metodo di servizio Web XML, detto DeleteAuthor. Tale metodo esegue un'operazione di database inserita nell'ambito di una transazione automatica.

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

Nota   Una transazione inizia solo quando il metodo di servizio Web XML attivante, ovvero il metodo chiamato dal client, dispone di metadati di transazione. Se il metodo di servizio Web XML attivante non contiene i metadati di transazione appropriati, i successivi metodi di servizio Web XML non potranno né partecipare a transazioni esistenti né iniziare nuove transazioni.

Vedere anche

Transazioni automatiche | Transazioni distribuite | Partecipazione a transazioni dei servizi Web XML creati con ASP.NET