Metodi batch
L'uso 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 una singola transazione di database, nell'ordine in 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 qualsiasi chiamata di metodo durante l'esecuzione di un batch, il server di report arresta l'esecuzione del batch ed esegue il rollback delle operazioni precedenti. Questa azione è utile quando una chiamata al metodo dipende dal completamento riuscito di altre chiamate di metodo in tale batch.
Il servizio Web non fornisce la semantica di blocco per le operazioni batch a più metodi. Le righe nel database del server di report non vengono bloccate per l'aggiornamento finché il messaggio non viene inviato al server e viene chiamato il Execute
comando .
Nessun controllo di concorrenza esiste per garantire che nessuno ha modificato il database dall'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, il nome dell'elemento è lo stesso).
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 = "https://<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 = "https://<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;
}
}