Поделиться через


Пакетные методы

Использование заголовков SOAP в службах Reporting Services позволяет включать в одну операцию несколько методов веб-служб. Методы выполняются в пределах области одной транзакции базы данных в том порядке, в котором они вызываются.

Одним из преимуществ использования пакетных методов с множественными операциями является возможность реализации отката. Если ошибка возникает при вызове любого метода во время выполнения пакета, сервер отчетов останавливает выполнение пакета и откатывает все предыдущие операции. Это действие полезно, если вызов метода зависит от успешного завершения других вызовов методов в этом пакете.

Веб-служба не предоставляет семантику блокировки для пакетных операций с несколькими способами. Строки в базе данных сервера отчетов не блокировались для обновления, пока сообщение не будет отправлено серверу и Execute вызывается команда.

Элементы управления параллелизмом не существуют, чтобы гарантировать, что никто не изменил базу данных с момента последнего чтения данных. Если два клиента изменяют один и тот же элемент, последнее обновление завершается успешно, если параметры по-прежнему допустимы (например, имя элемента совпадает).

В следующем примере метод CreateFolder вызывается три раза; данные вызовы выполняются как один пакет. Если любой из вызовов метода CreateFolder завершается неудачно, то отменяется весь пакет.

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