Пакетные методы
Использование заголовков 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;
}
}