一括処理方法
Reporting Services の SOAP ヘッダーを使用することによって、1 つの操作に複数の Web サービス メソッドを含めることができます。 メソッドは、1 つのデータベース トランザクションのスコープ内で、呼び出された順序で実行されます。
ロールバックは、複数メソッド バッチ操作の利点の 1 つです。 バッチの実行中にメソッド呼び出しでエラーが発生した場合、レポート サーバーはバッチの実行を停止し、以前の操作をロールバックします。 このアクションは、メソッド呼び出しがそのバッチ内の他のメソッド呼び出しの正常な完了に依存している場合に便利です。
Web サービスでは、複数メソッドのバッチ操作のロック セマンティクスは提供されません。 レポート サーバー データベース内の行は、メッセージがサーバーに送信され、 Execute
コマンドが呼び出されるまで、更新のためにロックされません。
データが最後に読み取られた後、誰もデータベースを変更しないことを保証するコンカレンシー制御は存在しません。 2 つのクライアントが同じ項目を変更した場合、パラメーターがまだ有効な場合 (たとえば、項目の名前が同じである場合)、最後の更新は成功します。
次の例では、CreateFolder メソッドを 3 回呼び出し、これらの呼び出しを 1 つのバッチとして実行します。 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;
}
}