Méthodes de traitement par lot
L'utilisation d'en-têtes SOAP dans Reporting Services vous permet d'inclure plusieurs méthodes Web Service dans une même opération. Les méthodes sont exécutées dans la portée d'une transaction de base de données unique, dans l'ordre de leur appel.
La restauration est un avantage offert par l'utilisation de plusieurs méthodes de traitements par lots. En cas d'erreur sur un appel de méthode au cours de l'exécution d'un lot, le serveur de rapports arrête l'exécution du lot et restaure les opérations précédentes. Cette opération est utile lorsqu'un appel de méthode dépend de l'achèvement réussi d'autres appels de méthode dans ce lot.
Le service Web ne fournit pas de sémantique de verrouillage pour les traitements par lots de plusieurs méthodes. Les lignes dans la base de données du serveur de rapports ne sont pas verrouillées pour la mise à jour tant que le message n'a pas été envoyé au serveur et la commande Execute appelée.
Il n'y a pas non plus de contrôles concurrentiels pour garantir que la base de données n'a pas changé depuis la dernière lecture des données. Si deux clients modifient le même élément, la dernière mise à jour réussit si les paramètres sont encore valides (par exemple, l'élément n'a pas été renommé).
L'exemple suivant appelle la méthode CreateFolder trois fois et exécute ces appels comme un lot unique. Si un des appels à CreateFolder échoue, le lot entier est annulé.
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;
}
}
Voir aussi