Metodi di invio in batch

L'utilizzo di intestazioni SOAP in Reporting Services consente di includere più metodi del servizio Web in una singola operazione. I metodi vengono eseguiti nell'ambito di un'unica transazione di database, nell'ordine con cui vengono chiamati.

La possibilità di eseguire il rollback rappresenta un vantaggio dell'utilizzo di operazioni batch con più metodi. Se si verifica un errore in alcune delle chiamate ai metodi mentre un batch è in esecuzione, il server di report arresta l'esecuzione del batch ed esegue il rollback di qualsiasi operazione precedente. Questo è utile quando una chiamata al metodo dipende dal corretto completamento delle altre chiamate ai metodi nel batch.

Il servizio Web non fornisce una semantica di blocco per le operazioni batch con più metodi. Le righe nel database del server di report non vengono bloccate per l'aggiornamento fino a quando il messaggio non viene inviato al server e non viene chiamato il comando Execute.

Non vengono inoltre eseguiti controlli della concorrenza per garantire che il database non sia stato modificato dopo l'ultima lettura dei dati. Se due client modificano lo stesso elemento, l'ultimo aggiornamento ha esito positivo se i parametri sono ancora validi (ad esempio se l'elemento non è stato rinominato).

Nell'esempio seguente il metodo CreateFolder viene chiamato tre volte e queste chiamate vengono eseguite come singolo batch. Se una delle chiamate a CreateFolder ha esito negativo, l'intero batch viene annullato.

Imports System
Imports System.Web.Services.Protocols
Imports myNamespace.MyReferenceName


Class Sample
    Sub Main(args() As String)
        Dim rs As New ReportingService2005()
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials
      ' Set the base Web service URL of the source server
      rs.Url = "http://<Server Name>/reportserver/ReportService2005.asmx"


        Dim bh As New BatchHeader()

        bh.BatchId = service.CreateBatch()
        rs.BatchHeaderValue = bh
        rs.CreateFolder("New Folder1", "/", Nothing)
        rs.CreateFolder("New Folder2", "/", Nothing)
        rs.CreateFolder("New Folder3", "/", Nothing)

        Console.WriteLine("Creating folders...")
        rs.BatchHeaderValue = bh
        rs.ExecuteBatch()
        Console.WriteLine("Folders created successfully.")

        rs.BatchHeaderValue = Nothing
    End Sub
End Class
using System;
using System.Web.Services.Protocols; 
using myNamespace.MyReferenceName;


class Sample
{
    static void Main(string[] args)
    {
        ReportingService2005 rs = new ReportingService2005();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
      // Set the base Web service URL of the source server
      rs.Url = "http://<Server Name>/reportserver/ReportService2005.asmx"

        BatchHeader bh = new BatchHeader();

        bh1.BatchID = service.CreateBatch();
        rs.BatchHeaderValue = bh;
        rs.CreateFolder("New Folder1", "/", null);
        rs.CreateFolder("New Folder2", "/", null);
        rs.CreateFolder("New Folder3", "/", null);

        Console.WriteLine("Creating folders...");
        rs.BatchHeaderValue = bh1;
        rs.ExecuteBatch();
        Console.WriteLine("Folders created successfully.");

        rs.BatchHeaderValue = null;
    }
}