SOAP アクティベーション

1. はじめに

これは COM+ コンポーネントのメソッド呼び出しを、SOAP を用いて行うものです。SOAP は HTTP 上のメソッド呼び出しを行うための、メソッドの指定パラメータを渡す方法などを定めています。

2. 作成する環境

COM+ コンポーネントのメソッドを Web サービスとして呼び出します。作成方法が簡単なように、COM+ コンポーネント及びテストクライアント両方ともマネージコードを使います。

3. 演習の流れ

3.1 サーバー側の設定

  1. COM+ コンポーネントの作成
  2. COM+ アプリケーションへの登録
  3. SOAP アクティベーションの有効化

3.2 テストクライアントの作成

XML Web サービスを使用する方法と同様。

  1. wsdl.exe コマンドでプロキシーコードを作成
  2. プロキシのインスタンスを経由してメソッドを呼び出す

4. サーバー側の設定

4.1 COM+ コンポーネントの作成

ここでは C# を利用してコンポーネントを作成します。

using System;
using System.Reflection;
using System.EnterpriseServices;
using System.Runtime.InteropServices;

// sn -k mykey.snk
[assembly:AssemblyKeyFile("mykey.snk")]


namespace MyTest {

    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class MyMath : ServicedComponent {

        public Int32 Add (Int32 i, Int32 j) {
            return i+j;
        }

    }
}

このコードを mymath.cs として保存します。

makefile は以下です。

CSC = csc.exe

TARGETNAME=mymath
SOURCE_FILE=mymath.cs

OUTDIR=.\chk

all: "$(OUTDIR)\$(TARGETNAME).dll"

clean:
    -del $(OUTDIR)\*.xml
    -del $(OUTDIR)\*.pdb

cleanall:clean
    -del $(OUTDIR)\$(TARGETNAME).dll

regascom:
    RegAsm "$(OUTDIR)\$(TARGETNAME).dll" /tlb:$(OUTDIR)\$(TARGETNAME).tlb
    GacUtil -i "$(OUTDIR)\$(TARGETNAME).dll"


"$(OUTDIR)" :
    @if not exist "$(OUTDIR)" mkdir "$(OUTDIR)"


CSC_OPT=\
    /nologo\
    /target:library\
    /out:$(OUTDIR)\$(TARGETNAME).dll\
    /doc:$(OUTDIR)\$(TARGETNAME).xml\
    /debug+\
    /debug:full\
    /optimize-\
    /warn:3

REF=\
    /r:System.EnterpriseServices.dll


$(OUTDIR)\$(TARGETNAME).dll: "$(OUTDIR)" $(SOURCE_FILE) mykey.snk
$(CSC) $(CSC_OPT) $(REF) $(SOURCE_FILE)

mykey.snk:
    sn -k mykey.snk

これらを同じフォルダに保存し、次のコマンドでコンポーネントを作成します。

> nmake

これが正常に終了すると、OUTDIR で指定したディレクトリに次のファイルが作成されます。

  • mymath.dll
  • mymath.pdb
  • mymath.xml

問題なく終了したら、続いて次のコマンドで .NET コンポーネントを COM+ として登録します。ここでは、makefile にあらかじめ定義されたコマンドを使用します。

> nmake regascom

特にエラーが無ければ OK です。正常終了すると、次のファイルが OUTDIR に作成されます。

  • mymath.tlb

4.2 COM+ アプリケーションへの登録

コンポーネントサービススナップインから、新規の COM+ アプリケーションを作成します。サーバーアプリケーションとして作成します。

COM+ アプリケーションを作成したら、Components に mymath.dll をドラッグアンドドロップします。下図のようにコンポーネントが登録されれば正常終了です。

4.3 SOAP アクティベーションの有効化

COM+ アプリケーションのプロパティから、[Activation] タブを選択し SOAP グループから [Uses SOAP] をチェックします。また、[SOAP VRoot] として MyMathServices と入力します。

[Apply] をクリックすると、SOAP VRoot で指定した名前の仮想ディレクトリが作成されたことを確認してください。

ここで、MyMathServices に作成された Default.aspx を参照すると次のようなページが表示されます。

5. テストクライアントの作成

5.1 wsdl.exe でプロキシコードを作成

次のコードを実行すると、Webサービスを呼び出すためのプロキシーコードが作成されます。

> wsdl.exe /namespace:MyTest http://<hostname>/MyMathServices/MyTest.MyMath.soap?WSDL

この結果、MyMathService.cs が作成されます。

5.2 クライアントのコード

以下のコードを console.cs として保存します。

using System;
using MyTest;

class HelloWorldApp {

    public static void Main() {
        MyMathService mms = new MyMathService();

        int x = mms.Add(5, 10);

        Console.WriteLine ("5+10={0}", x);
    }

}

makefile は以下です。console.cs と同じフォルダに保存してください。

CSC = csc.exe

TARGETNAME=console
SOURCE_FILE=console.cs MyMathService.cs
REF=

OUTDIR=.\chk
INTDIR=.\chk

all: "$(OUTDIR)\$(TARGETNAME).exe"

clean:
    -del *.xml *.pdb

cleanall:clean
    -del $(OUTDIR)\$(TARGETNAME).exe


"$(OUTDIR)" :
    if not exist "$(OUTDIR)" mkdir "$(OUTDIR)"


CSC_OPT=\
    /nologo\
    /target:exe\
    /out:$(OUTDIR)\$(TARGETNAME).exe\
    /doc:$(OUTDIR)\$(TARGETNAME).xml\
    /debug+\
    /debug:full\
    /optimize-\
    /warn:4


$(OUTDIR)\$(TARGETNAME).exe: "$(OUTDIR)" $(SOURCE_FILE)
    $(CSC) $(CSC_OPT) $(REF) $(SOURCE_FILE)

MyMathService.cs も同じフォルダに保存し、次のコマンドでビルドします。

> nmake

エラーが発生しなければすべて完了です。OUTDIR で指定したディレクトリに console.exe が作成されます。

console.exe の実行結果、次のように表示されれば OK です。

> console.exe
5+10=15

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説