1 / 36

IIS4.0/ASP, MTS によるシステム構築概説

IIS4.0/ASP, MTS によるシステム構築概説. 河端善博 ( bata@gold.ocn.ne.jp). アジェンダ. MTS 構造 MTS の概要 IIS と ASP ASP プログラムの概要 WAM (Web Application Manager) ASP 用 VB DLL の開発 ASP/MTS 統合 実行環境の連携 ASP/MTS の両方に対応するオブジェクト トランザクション対応 ASP. MTS = COM 実行環境.

kylee
Download Presentation

IIS4.0/ASP, MTS によるシステム構築概説

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IIS4.0/ASP, MTSによるシステム構築概説 河端善博(bata@gold.ocn.ne.jp)

  2. アジェンダ • MTS 構造 • MTSの概要 • IISとASP • ASPプログラムの概要 • WAM (Web Application Manager) • ASP用VB DLLの開発 • ASP/MTS統合 • 実行環境の連携 • ASP/MTSの両方に対応するオブジェクト • トランザクション対応ASP

  3. MTS = COM実行環境 • MTSは,MTSアプリケーションのためのサロゲートプロセスを作成MTS ExecutiveはMTSコンポーネントのランタイム環境を提供 • リモートクライアントアプリケーションは、「ベースクライアント」と呼ぶ MTSパッケージ 2 (Mtx.exe) MTSパッケージ 1 (Mtx.exe) ベースクライアント 1 ベースクライアント 2 ベースクライアント N MTS Executive (MtxEx.dll) MTS Executive (MtxEx.dll) COM (OLE32.dll) COM (OLE32.dll) Service Control Manager Distributed Transaction Coordinator (DTC)

  4. シンプルなMTSコンポーネントの作成 • ActiveX DLLとして単純に作成 • “Multiuse”クラスがそれぞれMTSコンポーネントとなる • “アパートメント”スレッドにより、アパートメント間の呼び出しを避ける • MTS環境に、作成したコンポーネントをインストール • MTSエクスプローラにより、MTSパッケージの登録、作成をする • MTSエクスプローラにより、MTSパッケージにDLLをインストールする • MTSエクスプローラにより、MTSコンポーネントを設定する • MTSベースクライアントを通常のCOMクライアントと同様に作成 • リモートCOMコンポーネントをクライアントコンピュータで有効にするクライアントは、オブジェクトがMTSで動いているかどうかに関係しない • MTSは、クライアント設定プログラムを自動作成するエクスプローラのパッケージの機能を使って、セットアッププログラムを作成できる。

  5. コンポーネントのアクティベーション • MTS Executiveが、アクティベーション要求に割り込む • レジストリ内のCLSIDは、コンポーネントインストール時に変更される • SCMは作成とアクティベーションを要求し、MtxEx.dllが処理する • MtxEx.dllは、クライアントとオブジェクト間のレイヤを提供 • このレイヤは、context wrapperと呼ばれる • これは、MTSで必要なオブジェトに関するメタデータをキャッシュする • また、オブジェクト作成者のセキュリティ情報をキャッシュする クライアント スタブ プロキシ ContextWrapper MTSオブジェクト ベースクライアントプロセス MTS アプリケーション

  6. Context Wrapperの役割 • context wrapperは、重要なレイヤを提供している • MTS Executiveにモニターオブジェクトのアクティベーションを可能とする • MTS Executiveにメソッド呼び出しのモニタを可能とする • MTSオブジェクトに呼び出し元のコンテキスト情報へのアクセスを可能とする • 以上のことをベースクライアントに対して透過的に処理するベースクライアントからは、オブジェクトと直接接続しているようにみえる。 • MTSオブジェクトは、MTS Executiveにアクセスできる • オブジェクトは、context wrapperにある情報にアクセスできる • オブジェクトは、呼び出し元コンテキスト情報により詳しくアクセスできる • オブジェクトは、 ObjectContextを通してMtxEx.dllにアクセスできる ‘ MTS用のDLLは、MTSApp Serverタイプライブラリに参照設定が必要 Public Sub SomeMtsObjectMethod() Dim ObjCtx As ObjectContext Set ObjCtx = GetObjectContext() ‘ objCtxをつかって、MtxEx.dllにアクセスできる End Sub

  7. アクティビィティと、同時実行 • MTSでの同時実行はアクティビティを元にしている • アクティビティは、ひとつのベースクライアントのために作られたMTSオブジェクトの集合 • MTSでの同時実行は、複数のクライアントに対応するためには、複数のアクティビティを要求する。 • アクティビティはSTAと、どこが同じ ? • MTSオブジェクトはそれぞれ、必ず一つのアクティビティに属する。 • アクティビティは、オブジェクト内部での同時実行を禁止する。このため、プログラマが同期、排他処理を行なう必要はない。 • アクティビティはSTAと、どこがちがう ? • アクティビティは、一つの論理スレッドに制限されるが、複数の物理スレッドから構成することができる。このケースは、アクティビティがパッケージ境界を拡張する時にあたる。

  8. オブジェクトをアクティビティ内に作成する Public Sub CreateMyObjects() Dim Ken As CKen, Brian As CBrain, Jason As CJason ‘ 正しい方法: MTS内にMTSオブジェクトを作成する Dim ObjCtx As ObjectContext Set ObjCtx = GetObjectContext() Set Ken = ObjCtx.CreateInstance("MyDll.CKen") ‘ 間違った方法 - プロキシ-スタブレイヤを使う Set Brain = CreateObject("MyDll.CBrain") ‘ 完全な間違い - MTSは、アクティベーション要求を認識することができない Set Jason = New CJason ‘ MTS DLL内では、やってはいけない End Sub ベースクライアント Root Brian Jason Ken アクティビティ 1 MTS Executive アクティビティ2

  9. MTS トランザクション • MTS トランザクションは、ACID ルールを強制する • トランザクションに参加しているすべてのオブジェクトは、変更を一括してコミットまたは、アボートする。 • トランザクションは、かならずアクティビティ内になければならない • この制限は、同時実行に関する問題 • トランザクションのルートオブジェクトはベースクライアントから作られる • トランザクションに参加するオブジェクトは、CreateInstanceで作成 • MTSコンポーネントは、すべてトランザクションサポートに設定 • この設定は、MTSインスタンスがある場合、どのトランザクションコンテキストを使うかを示す。

  10. オブジェクトをトランザクションの中に作成するオブジェクトをトランザクションの中に作成する ‘ ルートオブジェクトは「トランザクションが必要」に設定する Public Sub CreateOtherObjects() Dim ObjCtx As ObjectContext Set ObjCtx = GetObjectContext() Dim Ken As CKen, Brian As CBrian Dim Jason As CJason, Ted As CTed Set Ken = ObjCtx.CreateInstance("MyDll.CKen") Set Brian = ObjCtx.CreateInstance("MyDll.CBrian") Set Jason = ObjCtx.CreateInstance("MyDll.CJason") Set Ted = ObjCtx.CreateInstance("MyDll.CTed") End Sub CKen: トランザクションが必要 CBrian: 新しいトランザクションが必要 CJason: トランザクションをサポートする CTed:トランザクションをサポートしない トランザクション 1 トランザクション 2 ベースクライアント Root Brian アクティビティ境界 Ken Jason Ted MTS Executive

  11. トランザクション管理 • ObjectContext APIは、オブジェクトに投票権を与える • いずれかのオブジェクトがロールバックに投票すると、トランザクションは失敗になる • ルートは、コミットするときSetComplete()を呼ばなければならない • 参加しているオブジェクトは、コミットを追認することができる • ObjectContextの主要なメソッド • SetComplete:オブジェクトが正常終了したことを示すオブジェクト曰く:自分の変更はコミット準備完了、終了します • SetAbort:オブジェクトが作業を完了できなかったことを示すオブジェクト曰く: トランザクション全体のロールバック準備完了、終了する • DisableCommit:オブジェクトが作業中であることを示すオブジェクト曰く: コミットおよびロールバックの準備はできていない、終了する • EnableCommit:オブジェクトが作業を終了したことを示すオブジェクト曰く: コミットまたはロールバックの準備はできた、終了する

  12. コミット、アボートをプログラムする • 各トランザクションには、ルートオブジェクトがある • 通常、パッケージへのクライアント用エントリポイントを定義する • このオブジェクトはコミットするにはSetComplete()を呼ぶ必要がある • ルート以外のオブジェクトも投票できる • あるオブジェクトがSetAbort()すると、トランザクションは失敗する • あるオブジェクトがSetAbort()した後、ルートがSetComplete()するとランタイムエラーが発生する • オブジェクトは、SetAbort()した後は、エラーを発生するべき • MTSオブジェクトは、トランザクションの結果に投票する • トランザクション内の各オブジェクトは、ひとつの投票にまとめられる • オブジェクトはメソッドの中でSetComplete(),SetAbort()を何回でも呼び出すことができるが、最後のものが有効となる • ルートオブジェクトの最上位のメソッドがなにをするかを決めた時点で、MTS ExecutiveとDTCは、投票する。

  13. 参加オブジェクトのコード ‘*** トランザクションコンポーネント CCustomer ‘*** すべての処理は、結果としてSetComplete()かSetAbort()を呼ぶ Public Sub Charge(ByVal Customer As String, ByVal Price As Currency) On Error GoTo Charge_Err Dim ObjCtx As ObjectContext Set ObjCtx = GetObjectContext() Dim conn As New ADODB.Connection conn.Open sConnect ‘ ビジネスルールロジック:Customerに十分なクレジットがあることを保証する Dim AvailableCredit As Currency AvailableCredit = GetAvailableCredit(Customer, conn) If (AvailableCredit < Price) Then ObjCtx.SetAbort ‘ロールバックし,異常終了時のルールとして,エラーを発生するrollback Err.Raise meOrderExceedsAvailableCredit, , “十分なお金がありません" End If conn.Execute ”SQLステートメント" conn.Close ObjCtx.SetComplete ‘ すべてうまく終了した時、コミットに投票する Exit Sub Charge_Err: ObjCtx.SetAbort() ‘ なんらかのエラーが発生したら、ロールバックし、エラーを発生させる Err.Raise meUnexpectedError, , “Customerに請求できませんでした!" End Sub

  14. ルートオブジェクトのコード ‘*** トランザクション処理をするルートコンポーネント CBroker Function SubmitOrder(Customer, Product, Quantity, OrderStatus) As Long On Error GoTo SubmitError Dim ObjCtx As ObjectContext Set ObjCtx = GetObjectContext() Dim Products As CProducts, Price As Currency Dim Customers As CCustomers Dim Orders As COrders, OrderNumber As Long ‘ トランザクションを必要、またはサポートするコンポーネントからオブジェクトを作成する Set Products = ObjCtx.CreateInstance("Market.CProducts") Set Customers = ObjCtx.CreateInstance("Market.CCustomers") Set Orders = ObjCtx.CreateInstance("Market.COrders") Price = Products.Purchase(Product, Quantity) ‘ 在庫を減らす Customers.Charge Customer, Price ‘ カスタマに請求する OrderNumber = Orders.Add(Customer, Product, Quantity, Price) ‘ 発注を追加 OrderStatus = “ 発注番号は、 " & OrderNumber SubmitOrder = OrderNumber ObjCtx.SetComplete ‘ MTXにロックを解放するよう指示する。 Exit Function SubmitError: ObjCtx.SetAbort ' MTXにロックを解放するよう指示する。 Err.Raise Err.Number, , “ブローカは、販売を処理できませんでした:" & Err.Description End Function

  15. ベースクライアントのコードは、シンプルになるベースクライアントのコードは、シンプルになる ‘ ベースクライアントのコードは、とてもシンプルになる Private Broker As CBroker Private Sub Form_Load() Set Broker = New CBroker Exit Sub Private Sub cmdSubmit_Click() On Error GoTo Submit_Err Dim OrderStatus As String ‘ SubmitOrder()の処理中に 4つの MTSオブジェクトが存在する Broker.SubmitOrder txtCustomer, cboProduct, txtQuantity, OrderStatus ‘クライアントに処理が戻った時点で4つのMTSオブジェクトは、解放される MsgBox OrderStatus, vbInformation, “発注処理は正常に終了しました。" Exit Sub Submit_Err: ‘ ビジネスオブジェクトは、クライアントにエラーの原因について知らせる MsgBox Err.Description, vbCritical, “発注は完了しませんでした。" End Sub

  16. 再利用について考慮すべき点 • ベースクライアントの責任 • トランザクションMTSコンポーネントの作成とメソッド呼び出しのみ • ルートオブジェクトの責任 • 常に「トランザクションが必要」に設定する • 他のオブジェクトをトランザクションに参加させ、メソッド呼び出し • 必ずSetComplete() または SetAbort()を呼び出す • トランザクションに失敗したら、ベースクライアントにエラーで戻る • 参加するオブジェクトの責任 • 「トランザクションが必要」「トランザクションをサポート」に設定 • 必ずSetComplete() または SetAbort()を呼び出す必須ではないが、こうしておけば、コンポーネントをルートオブジェクトとして使える • 必ずSetAbort()した後は、エラーを発生させる処理について詳細なエラーメッセージを作成する

  17. Webサービスでのサーバサイド処理 • サーバーサイド処理の魅力 • 処理が早く、よりセキュアなデータアクセスができる • ビジネスロジックのプログラムの集中管理 • 複数ユーザの間で、共有ステータスを利用できる • 以前の方法は、手間が多かった • CGI (Common gateway Interface) • ISAPI (IIS API for C/C++ programmers) • Internet Information Server 3.0 からASP導入 • ASPプログラムは、スクリプト言語VBScript,JScriptを利用 • 開発時にコンパイルが不要運用中のWebサイトの変更が簡単 • ASPプログラムは、Webサーバと同じプロセスで動作それぞれのプロセスで動作するCGIと比較すると効率がよい

  18. ASPスクリプトはどうやって動いているか • .asp拡張子ファイルはASPフィルタに送られる • サーバサイドスクリプト部分が解析され、実行される • HTMLストリームがいつもと同じくクライアントに戻される • ASPアプリケーションは、ブラウザに依存しないクライアントに、Internet Explorer,Windows,COMは必要がない *.htm *.html 普通のHTMLがクライアントブラウザに送られる ASP フィルタ *.asp サーバサイド処理

  19. ASPフィルタ • フィルタは、以下のサーバスクリプト部分を探す • <SCRIPT> タグのうち RunAt=Server属性を持つもの • <% … %>で区切られたのスクリプト • <OBJECT>タグのうちRunAt=Server属性を持つもの • <OBJECT> では、PROGID またはCLASSIDを使える • その他の部分は、そのままクライアントに送られる 現在の時刻 <% =FormatDateTime(Now(), vbShortTime) %> <br> <SCRIPT LANGUAGE = VBScript RunAt = Server> sDay = “今日は、 " & WeekdayName(Weekday(Now())) Response.Write sDay </SCRIPT> フィルタ前 現在の時刻 10:30 <br> 今日は 木曜日 フィルタ後

  20. ASP オブジェクト • Request • クエリー文字列、フォームの値、ServerVariablesを返す • Response • クライアントへのHTMLストリームにかき出す機能を提供 • クライアントを別のページにリダイレクトする機能を提供 • Session • ひとつのクライアントからの複数のリクエスト間で情報を共有する機能を提供する • Application • 複数のクライアント間で情報を共有する機能を提供する • Server • オブジェクト作成時に利用する

  21. SessionとApplicationの値 • Session、Application は、値の保存に利用できる • 値は、拡張可能な変数コレクションに保存される • Sessionは、ユーザ単位で値を保存する • ブラウザがクッキーに対応することが必須 • Applicationは、すべてのユーザに共通の値を保存する • データを書き込むときには、Lock()、Unlock()メソッドを利用する Session(“MyName”) = Request.ServerVariables(“LOGON_USER”) Response.Write Session(“MyName”) Application.Lock Application("UserCount") = Application("UserCount") + 1 Application.Unlock

  22. Server.CreateObject()を使う • ServerオブジェクトのCreateObject()メソッドを使う • 画面表示のないCOMオブジェクトの作成(インプセスまたは、アウトプセス) • オブジェクトは、サーバ上に作成される • 通常、オブジェクトは一回のリクエストの間だけ生きている • SessionやApplication変数にオブジェクトへの参照を保存することにより、リクエストを超えてオブジェクトを生存させることができる Dim Products Set Products = Server.CreateObject("Market.CProducts") Dim Product, Display, ComboList ProductList = Products.GetListWithInfo() For i = LBound(ProductList) To UBound(ProductList) Display = Display & ProductList(i) & "<br>" Next Response.Write Display

  23. IIS/ASPの構造 • IIS Webサーバプロセスは、InetInfo.exeから起動される • Webサーバプロセスは、NTのサービスとして動作する • ASPアプリケーションは、WAM上に存在する • WAM (Web Application Manager) は、ASPリクエストに対応する • WAMは、asp.dllなどのシステムDLLと通信する • WAMは、ASPプログラムを処理するaspは、WAMに管理される内蔵オブジェクトを呼び出す Web サーバプロセス (InetInfo.exe) MyASPPage.asp <html> <% Response.Write %> </html HTTTP Request WAM HTTTP Response NT オペレーティングシステム

  24. スクリプティングコンテキスト • WAMオブジェクトは、スクリプティングコンテキストを提供 • WAMもCOMオブジェクトである • スクリプティングコンテキストは、ASPの内部オブジェクトを提供Request, Response, Session, Application , Serverがある • ASPプログラムは、直接このようなオブジェクトにアクセスするWAMとスクリプティングコンテキストは、実際、ASPプログラムには透過的に動作 • スクリプティングコンテキストは、ASPページに関連するASPページとスクリプティングコンテキストの生存期間は短い Web サーバプロセス (InetInfo.exe) ‘ ASP プログラム <% Dim s s = “それはできないよ、HAL" Response.Write s %> WAM

  25. VB コンポーネントから ASPにアクセスする • 自分のVBオブジェクトからスクリプティングコンテキストにアクセスできる • ASPプログラムからオブジェクトが作成されると、WAMは、オブジェクトのOnStartPage()メソッドを探して、呼び出す • OnStartPage()を実装すると、スクリプティングコンテキストへの参照を得ることができる。 <% ‘ ASPプログラムからオブジェクトを作成 Dim obj Set obj = Server.CreateObject("ProgID") obj.Main ‘ Main()メソッドを呼び出す %> Web サーバプロセス (InetInfo.exe) ‘ ASP プログラム <% ' CreateObject %> ‘ VB DLL内のプログラム Private ScriptCtx As ScriptingContext ‘ WAM は、このメソッドを呼び出す Sub OnStartPage(sc As ScriptingContext) Set ScriptCtx = sc End Sub ‘ スクリプティングコンテキストを使う Sub Main() ScriptCtx.Response.Write "Hello World" End Sub WAM 自分の VBオブジェクト

  26. VB/VBA プログラムと ASPの比較 • ASPからVB/VBAを使うメリット • VBプログラムは、ASPよりもテスト、デバッグ、管理が楽VBインテリセンス、オブジェクトブラウザ、コンパイル時の型チェックなど • VBプログラムは、コンパイルされ、より高速に動作する • VBクラスは、管理上、再利用しやすい • Win32 API にアクセスできる • ASPプログラマからプログラムを隠すことができる • ASPが必要な場面 • ASP は、VB DLLを呼び出すのに必要である • ASP プログラムは、最小限の手間で、オブジェクトの作成と呼び出しができる • ASPページは、クライアントのHTMLと同じ構造をとっている

  27. MTS/ASP統合 • MTS とWebサーバは、密に統合されている • InetInfo.exeのためのMTSライブラリパッケージがあらかじめインストールされている • このMTSパッケージの名前は、 IIS In-process Applications • MtxEx.dllは、Webサーバプロセスにロードされる • 各WAMインスタンスは、MTSオブジェクトそのもの • Webサーバプロセスで動作する各ASPアプリケーションは、それぞれWAMのインスタンスを得るMTS/WAMコンポーネントは、自動的に構成される Web サーバプロセス (InetInfo.exe) WAM 3 WAM 2 WAM 1 MTS Executive (MtxEx.dll)

  28. ASPからMTSオブジェクトを実行する • 自分をDLLをIISパッケージにインストールできる • オブジェクトは、ASPプログラムと同じプロセスに作られるパフォーマンスに優れる • VBオブジェクトからWAMとMtxEx.dllにアクセスできる • Webクライアントから効果的にMTSトランザクションを実行できる Web サーバプロセス (InetInfo.exe) MTS トランザクション Credit ブラウザクライアント WAM Root Debit MTS Executive (MtxEx.dll)

  29. ASPオブジェクトを使う • OnStartPage() は、旧式 • ASPオブジェクトへのアクセスには、MTS ObjectContextを利用すべき • VBプロジェクトにて、ASPとMTSのタイプライブラリに参照設定する <% ‘ ASPプログラム: CreateObject する Dim obj Set obj = Server.CreateObject("MyDLL.MyClass") obj.Main ‘ Main()を呼び出す %> ‘ ASP プログラム <% ' CreateObject %> ‘ VB DLLプログラム Sub Main() Dim ObjCtx As ObjectContext, resp As Response Set ObjCtx = GetObjectContext() Set resp = ObjCtx("Response") resp.Write "Hello World<br>" End Sub WAM 自分のVBオブジェクト

  30. ASPアプリケーションを分離して実行する • ASPアプリケーションを分離プロセスで実行することができる • 設定は簡単 - 仮想ディレクトリのプロパティを変更する • 新しいパッケージが自動的に作成される • 分離プロセスのメリット • 可用性:問題のあるASPアプリケーションによって、Webサーバや、他のアプリケーションに影響を及ぼさない • 開発中:プロセスをアンロードすることにより、VB DLLをリビルドできるDLLがWebサーバ内で動作している場合、サービスを停止、開始する必要がある。 Web サーバプロセス(InetInfo.exe) 分離 ASP プロセス(Mtx.exe) ブラウザクライアント WS WAM WAM MTS Executive (MtxEx.dll) MTS Executive (MtxEx.dll)

  31. ASP/MTS 統合 • 以下の図の状態にするための手順 1. 仮想ディレクトリを作成し、分離プロセスに設定する 2. 自分のVB/MTS DLLをあらかじめ作成しておいたMTSパッケージにインストールする 3. ASPプログラムからMTSコンポーネントを作成する 4.トランザクションを処理するMTSコンポーネントのメソッドを呼ぶ 自分の ASP プロセス (MTX.exe) Web サーバプロセス (InetInfo.exe) MTS トランザクション Credit ブラウザクライアント WS WAM WAM Root Debit MTS Executive (MtxEx.dll) MTS Executive (MtxEx.dll)

  32. トランザクション対応 Active Server Pages • Active server pageは、トランザクションを扱うことができる • これは、ASPリクエスト毎に、WAMがCOMオブジェクトを作成することを意味する • このオブジェクトは、MTSトランザクションのルートになることができる • ASPに、トランザクション対応ページという指定をするだけ 各自のASPプロセス (MTX.exe) MTS トランザクション <%@ TRANSACTION=Required %> <% ' Create Object 1 ' Create Object 2 ' Write changes 'SetComplete/Abort logic %> Credit ブラウザクライアント WAM Root Debit MTS Executive (MtxEx.dll)

  33. トランザクション対応 Active Server Page <%@ TRANSACTION=Required LANGUAGE="VBScript" %> <% Main Sub Main() On Error Resume Next ‘ VB Script でのエラー処理は、すこし面倒 Amount = Request.Form("txtAmount") Set Credit = Server.CreateObject("Bank.CCredit") Set Debit = Server.CreateObject("Bank.CDebit") Dim bAborted Credit.Write Amount ‘ Err.Numberをチェックして、処理が成功したか確認しなければならない If Err.Number <> 0 Then bAborted = True If Not bAborted Then Debit.Write Amount If Err.Number <> 0 Then bAborted = True ‘ 要求をcommitまたは、abortする ‘ ASP は、ObjectContext を公開する。 If bAborted Then ObjectContext.SetAbort Else ObjectContext.SetComplete End Sub ‘ ASP は、commit/abortを処理するイベントをサポートする。 Sub OnTransactionCommit() Response.Write “トランザクション成功" End sub Sub OnTransactionAbort() Response.Write “トランザクション失敗: ” & Err.Number‘ ユーザにエラーメッセージを返す End sub %>

  34. トランザクション対応ページを使うべきか? • 利点 • 自由度の高さ - ASPでトランザクションオブジェクトが扱えるASPだけで、複雑なトランザクションが作成できる • メモ帳でも、ミッションクリティカルなビジネスロジックが変更できる • 欠点 • メモ帳でも、ミッションクリティカルなビジネスロジックが変更できる • ASPは、VB/C++に比べて、大規模なプログラムの管理が難しい • VB開発環境の恩恵をうけられない • 推薦 • できるだけASPを小さくしておく • ASPプログラムは、DLLを呼び出すのに必要最小限にして使う • すべてのビジネスロジックは、DLLに定義する • ASPページは、クライアントにHTMLを送るテンプレートして使う

  35. まとめ • MTS 構造 • MTSの概要 • IISとASP • ASPプログラムの概要 • WAM (Web Application Manager) • ASP用VB DLLの開発 • ASP/MTS統合 • 実行環境の連携 • ASP/MTSの両方に対応するオブジェクト • トランザクション対応ASP

  36. 参考 • ホームページ • http://www.kawabata.com/ • メーリングリスト • http://www.users.gr.jp/ml/ • ASP,COM,SQL,Exchange,Terminal Server,NT5

More Related