連載
» 2004年12月28日 00時00分 公開

ODP.NETファーストステップ(2):ASP.NETの利点を引き出すODP.NET活用法 (4/4)

[大田浩,日本オラクル]
前のページへ 1|2|3|4       

XML WebサービスとCOM+ Servicesの連携

 XML WebサービスとCOM+ Servicesを連携させると、トランザクションのコミットおよびロールバックを処理する特定のコードを記述する必要はなくなります。オブジェクトがトランザクションに参加するかどうかは、“宣言”によって決定することが可能になります。

 ASP.NETを使用して作成したXML Webサービスでは、XML Webサービス・メソッドに適用されたWebMethod属性のTransactionOptionプロパティを設定することでトランザクション動作を宣言できます。XML

Webサービス・メソッドの実行中に例外がスローされた場合、トランザクションは自動的に中止されます。その逆に、例外が発生しない場合は、トランザクションは自動的にコミットされます。

 XML WebサービスとCOM+ Servicesを連携させるには以下の作業を行います。

1. System.WebServices.dllの参照設定

 ASP.NET Webサービス・プロジェクトの参照設定でSystem.WebServices.dllを追加します。

図6 System.WebServices.dllの参照設定 図6 System.WebServices.dllの参照設定

2. WebメソッドのTransactionOptionの設定

 WebMethod属性のTransactionOptionプロパティを設定することでトランザクションをサポートします。

Imports System.Web.Services
Imports System.EnterpriseServices
  〜 省略 〜

  <WebMethod(TransactionOption:= _
  TransactionOption.RequiresNew)> _
  Public Sub UpdateEmployeeData(ByVal sId As String, _
  ByVal sEmpName As String)
    Try
      '処理を記述
    Catch ex As Exception
      '失敗時は ContextUtilオブジェクトの
      'SetAbortメソッドを呼び出すことにより
      'ロールバック
      ContextUtil.SetAbort()
    End Try
  End Sub
リスト13 WebMethod属性でトランザクションオプションを指定(VB.NET)

using System.Web.Services;
using System.EnterpriseServices;
  〜 省略 〜

  [WebMethod(TransactionOption=
   TransactionOption.RequiresNew)]
  private void UpdateEmployeeData(String sId, 
                                  String sEmpName)
  {
    try
    {
      //処理を記述
    }
    catch(Exception ex)
    {
      //失敗時は ContextUtilオブジェクトの
      //SetAbortメソッドを呼び出すことにより
      //ロールバック
      ContextUtil.SetAbort();
    }
  }
リスト14 WebMethod属性でトランザクションオプションを指定(C#)

 TransactionOptionは以下の5つのオプションをサポートしています。

Transaction Option 説明
Disabled XML Webサービス・メソッドが、トランザクションのスコープ内で実行されないことを示します。要求が処理されるときに、XML Webサービス・メソッドがトランザクションなしで実行されます。
[WebMethod(TransactionOption=TransactionOption.Disabled)]
NotSupported XML Webサービス・メソッドが、トランザクションのスコープ内で実行されないことを示します。要求が処理されるときに、XML Webサービス・メソッドがトランザクションなしで実行されます。
[WebMethod(TransactionOption=TransactionOption.NotSupported)]
Supported XML Webサービス・メソッドが、トランザクションのスコープ内で実行されないことを示します。要求が処理されるときに、XML Webサービスがトランザクションなしで作成されます。
[WebMethod(TransactionOption=TransactionOption.Supported)]
Required XML Webサービス・メソッドに、トランザクションが必要であることを示します。XML Webサービス・メソッドは、トランザクションにルート・オブジェクトとしてだけ参加できるため、XML Webサービス・メソッド用に新しいトランザクションが作成されます。
[WebMethod(TransactionOption= TransactionOption.Required)]
RequiresNew XML Webサービス・メソッドに新しいトランザクションが必要であることを示します。要求が処理されるときに、新しいトランザクション内でXML Webサービスが作成されます。
[WebMethod(TransactionOption=TransactionOption.RequiresNew)]
表5 TransactionOptionがサポートする5つのオプション
XML Webサービス上でCOM+ Servicesを利用するためには、Oracle Services for Microsoft Transaction Serverがインストールされている必要があります。インストール方法についてはOTN(Oracle Technology Network)の「意外と簡単!?.NETでOracle」にて詳細な手順を説明していますので、そちらを参照してください。

ASP.NETでODP.NETを利用する際の注意点

 最後に、ASP.NETからODP.NETを利用する際の注意点を説明します。IISではASP.NETスクリプトの実行時、ASPNETユーザーとして実行されます。ASPNETユーザーのORACLE_HOMEディレクトリへのアクセス権がないと図7のようなエラーが発生しますので、アクセス権を設定する必要があります。

図7 ORACLE_HOMEへのアクセス権がないために発生するエラー画面(クリックすると拡大します) 図7 ORACLE_HOMEへのアクセス権がないために発生するエラー画面(クリックすると拡大します)

手順1

Administrator権限のあるユーザーでWindowsにログオンする。

手順2

WindowsのExplorer(Explorer.exe)を起動し、ORACLE_HOMEディレクトリを選択して右クリック。

手順3

「プロパティ」を選択し「セキュリティ」タブを開く。

手順4「追加(D)」を押し「ユーザーまたはグループの選択」画面を表示する(画像をクリックすると拡大します)。

手順5

「場所」からローカルマシンを選択し、上記の「ASPNET」を選択し「追加(A)」を押し「OK」を押して追加する。

手順6

手順5で追加したユーザーを選択し、「アクセス許可(P)」より「許可」の列にある「読み取りと実行」のチェックを付け「適用(A)」に続いて「OK」を押す。


 今回はASP.NETからODP.NETを使用する際のコーディングについて説明しました。次回は、データアクセスの詳細な説明とパフォーマンスを向上させるためのコーディングを説明します。(次回へ続く)

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。