Batch 메서드
Reporting Services에서 SOAP 헤더를 사용하면 단일 작업에 여러 웹 서비스 메서드를 포함시킬 수 있습니다. 메서드는 단일 데이터베이스 트랜잭션의 범위 내에서 호출되는 순서대로 실행됩니다.
롤백은 다중 메서드 일괄 처리 작업을 사용할 때의 한 가지 이점입니다. 일괄 처리가 실행되는 동안 메서드 호출에서 오류가 발생하면 보고서 서버는 일괄 처리 실행을 중지하고 이전 작업을 롤백합니다. 이 작업은 메서드 호출이 해당 일괄 처리에서 다른 메서드 호출의 성공적인 완료에 따라 달라지는 경우에 유용합니다.
웹 서비스는 다중 메서드 일괄 처리 작업에 대한 잠금 의미 체계를 제공하지 않습니다. 보고서 서버 데이터베이스의 행은 메시지가 서버 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;
}
}