VCLforWeb(IntraWeb)でStandAloneモードとISAPIモードを切り替える方法
6 IntraWebChangeStdAlone-ISAPI 動作確認 Delphi2007 更新日 2007/11/19(月)

IntraWeb (2007版からは VCL for Web と名称変更) には
Webアプリケーションを作成する
[StandAlone Application]、[ISAPI Extension]、
[Service Application]というモードがあります。


[StandAlone Application]は、
Windowsアプリケーションが起動して、
このプログラムがHTTPでソケット通信をすることでWebサーバープログラムになり
それがWebアプリケーションになるモードです。

[ISAPI Extension]は
MicrosoftのIISというWEBアプリケーションサーバーで動作する
ISAPI用DLLを作成するモードです。

ライセンスの面で複雑なことになっているのですが
BDS2006のPro版の場合
    [StandAlone Application]
        ローカルPCからだけアクセス可能なWEBアプリケーション
        つまりテスト動作にしか使えない。
        
    [ISAPI Extension]
        MicrosoftのIISサーバーで動作するISAPIのDLL形式の
        WEBアプリケーション、Release版にすることが可能。
            
    [Service Application]
        Pro版では使えない。
        
D2007 for Win32の場合
    [StandAlone Application]
        5接続だけ許容できる、WEBアプリケーション。
        社内運用とかだけに使えるかもしれない。
    
    [ISAPI Extension]
        Pro版では使えない。

    [Service Application]
        Pro版では使えない。

2007/11/19(月)現在

上記のようになっています。
残念ながら、D2007ではPro版ではVCL for WEBでの
Webアプリケーション開発は、制限が大きすぎてやりにくくなってしまっていますが

BDS2006の場合では
[StandAlone Application]と[ISAPI Extension]を切り替えて使用することができます。

わざわざ切り替えて使うメリットが何かあるかというと
[StandAlone Application]を作成すると
アプリケーションが起動して
ツールバー左の地球のボタンを押すとブラウザが起動してWEBアプリケーションが動作します。


これがWEBアプリケーションのインストールを不要にして
動作確認を行う際には非常に使い勝手のよい便利なモードなのですが

上で記述したとおり、BDS2006Proに付属のIntraWebには
『自分のPCからしかアクセスできない。』という
非常に致命的な制限があります。


このため、[StandAlone Application]はWEBアプリケーションの動作テストに使い、
リリースには[ISAPI Extension]を使うと、アクセス制限がなく
便利に使えるわけです。



通常は新規作成の[Intraweb Application Wizard]で指定して作るので
二つのモードは、切り替えはできないように見えます。





そこで、最も簡単なWebアプリケーションを作成して
IntraWebアプリケーションのソースを比較してみました。

IntraWebでは初期ページを1ページ作成すると、次のファイルができます。
これは[StandAlone Application]でも[ISAPI Extension]でも同じです。
    
    Project1.dpr
    ServerController.dfm
    ServerController.pas
    Unit1.dfm
    Unit1.pas
    UserSessionUnit.dfm
    UserSessionUnit.pas

この二つのソースコードを比較すると異なるのは
    Project1.dpr
プロジェクトソースファイルだけです。

ということで、この二つを別々に用意しておけば
切り替えて使える。ということです。

このファイルの違いを記述しておきます。
────────────────────
//[StandAlone Application]のProject1.dpr
program Project1;

uses
  Forms,
  IWMain,
  Unit1 in 'Unit1.pas' {IWForm11: TIWAppForm},
  ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},
  UserSessionUnit in 'UserSessionUnit.pas' {IWUserSession: TIWUserSessionBase};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TformIWMain, formIWMain);
  Application.Run;
end.
────────────────────
//[ISAPI Extension]のProject1.dpr
library Project1;

uses
  ISAPIApp,
  IWInitISAPI,
  Unit1 in 'Unit1.pas' {IWForm11: TIWAppForm},
  ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},
  UserSessionUnit in 'UserSessionUnit.pas' {IWUserSession: TIWUserSessionBase};

{$R *.RES}

exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;

begin
  IWRun;
end.
────────────────────
このファイルを別名で用意しておくこと、つまり
[StandAlone Application]としては、testProject1.dprを用意して
[ISAPI Extension]としては、Project1.dprを用意して
各々コンパイルをすると

作成した内容は同じで、作成されるファイルが
testProject.exe か Project.dll を区別することで

テスト用とリリース用のWEBアプリケーションを
作り分けすることができます。


BDS2006の場合には、便利に使ってください。

D2007でもエンタープライズ版などでは
このテクニックが利用できます。