Partilhar via


Métodos de processamento em lote

O uso de cabeçalhos SOAP no Reporting Services permite incluir vários métodos de serviços Web em uma única operação. Os métodos são executados dentro do escopo de uma única transação de banco de dados, na ordem que são chamados.

A reversão é uma vantagem da utilização de operações de lote de vários métodos. Se houver um erro em qualquer uma das chamadas de método durante a execução do lote, o servidor de relatório interromperá a execução do lote e reverterá qualquer operação anterior. Isso é útil quando uma chamada de método depende da conclusão bem-sucedida de outras chamadas de método daquele lote.

O serviço Web não oferece semântica de bloqueio para operações de lote de vários métodos. As linhas do banco de dados do servidor de relatório não estarão bloqueadas para atualização até que a mensagem seja enviada ao servidor e que o comando Execute seja chamado.

Também não há nenhum controle de simultaneidade para garantir que o banco de dados não foi alterado desde que os dados foram lidos pela última vez. Se dois clientes modificarem o mesmo item, a última atualização terá êxito se os parâmetros ainda forem válidos (por exemplo, o item ainda não foi renomeado).

O exemplo a seguir chama o método CreateFolder três vezes e executa essas chamadas como um único lote. Se qualquer uma das chamadas para CreateFolder falhar, o lote inteiro será cancelado.

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;
    }
}