メソッドのバッチ処理

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