SOAP アクティベーション
1. はじめに
これは COM+ コンポーネントのメソッド呼び出しを、SOAP を用いて行うものです。SOAP は HTTP 上のメソッド呼び出しを行うための、メソッドの指定パラメータを渡す方法などを定めています。
2. 作成する環境
COM+ コンポーネントのメソッドを Web サービスとして呼び出します。作成方法が簡単なように、COM+ コンポーネント及びテストクライアント両方ともマネージコードを使います。
3. 演習の流れ
3.1 サーバー側の設定
3.2 テストクライアントの作成
XML Web サービスを使用する方法と同様。
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