第 8 章
Peer Web Services for Windows NT では、情報とアプリケーションの両方をパブリッシュすることができます。つまり、静的な情報ページから対話型のアプリケーションまで、さまざまなものを自分の Web サイトに収録できるわけです。さらに、データベースから情報を検索して取り出したり、逆にデータベースに情報を追加することもできます。
この章では、次の項目について説明します。
日本語を含む情報をインターネット上でパブリッシュする際には、使用する文字種に注意が必要です。Windows のメモ帳などで HTML ファイルを作成する際に、1 バイト カナ (半角カナ) や機種依存文字 (丸囲みの数字やローマ数字など) は使用しないでください。インターネット上では、使用するコンピュータによってさまざまな文字コード体系 (日本語では ISO-2022-JP、シフト JIS (MS 漢字)、EUC) などが使用されています。異なる文字コード体系でパブリッシュされた情報は、表示を行うコンピュータ上のブラウザが、使用されている文字コードを識別し、変換を行ったうえで表示をしています。しかし、1 バイト カナや機種依存文字を持たないコンピュータもあり、元の文字とは異なる文字に変換されたり、障害を発生させる原因にもなるため、インターネット上ではこれらの文字を使わないことになっています。イントラネット内では、このような制限はありませんので、システム管理者の指示に従ってください。ただし、将来的にインターネットへ接続する予定があるなら、上記の文字を使用しないことを推奨します。 HTML ファイルの作成には、HTML エディタやほかのシステムを使用します。
HTML ファイルには、システム上にあるほかのファイルへのハイパーリンクを含めることができます。HTML ページに画像や音声を含めるには、専用のソフトウェアを使ってそれらを作成、編集する必要があります。
HTML 形式、または他の形式で情報を作成したら、それらをデフォルト ディレクトリ \Inetsrv\Wwwroot にコピーするか、またはその情報のあるディレクトリをデフォルトのホーム ディレクトリとして変更することができます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters\MimeMap
次の構文を使って、コンピュータに必要な MIME マップの REG_SZ 値を追加します。
<mime type>,<filename extension>,<unused parameter>,<gopher type>
たとえば、次のようになります。
text/html,htm,/unused,1
image/jpeg,jpeg,/unused,5
値に関連付けられる文字列 (つまり、値の中身) には何も入れないでください。アスタリスク (*) として指定されているファイル名拡張子を持つデフォルトのエントリは、MIME マップが存在しないときに使用される、デフォルトの MIME タイプ型です。たとえば、ファイル名拡張子 .vgr が MIME タイプ型にマップされていないときに Current.vgr というファイルに対する要求があった場合、コンピュータはそれを処理するために、アスタリスク拡張子に対して指定された MIME タイプ型を使用します。通常この MIME タイプ型はバイナリ データに対して使用される型であり、これによって、ブラウザはファイルをディスクに保存します。
インクルード文の形式は次のとおりです。
<!--#include file="value"-->
"value" には、 WWW サービスのホーム ディレクトリからの相対パス、またはフルパスを指定します。
たとえば、各 HTML ドキュメントに自分のホーム ページへのリンクを含めるには、次のようにします。
<A HREF="/homepage.htm"><IMG SRC="/images/button_h.gif"></A>
stm ファイルを使うと、パフォーマンスに影響します。そのため、必要なときだけこの拡張子を使うようにしてください。
You can return to: <!--#include file="/linkhome.htm"--> at any time
ここで指定するパスはすべて WWW ホーム ディレクトリからの相対パスであること、および仮想ディレクトリを含めることができることに注意してください。
ISAPI を使用するアプリケーションはダイナミックリンク ライブラリ (DLL) としてコンパイルされ、WWW サービスによってスタートアップ時にロードされます。ISAPI プログラムはメモリ内に常駐するため、CGI で作成されたアプリケーションよりもはるかに高速に動作します。
ISAPI は、Web サーバー上で DLL として動作するアプリケーションを作成するために使うことができます。CGI (Common Gateway Interface) スクリプトを使った経験のある方は、ISAPI アプリケーションのパフォーマンスが格段に優れていることがわかると思います。これは、アプリケーションがサーバーの実行時にメモリにロードされるためです。また、個々の要求によってプロセスが別々に起動することもないため、オーバーヘッドが少なくなります。
ISAPI には上記の機能以外にも、要求の前処理および応答の後処理の機能があり、これによって HyperText Transport Protocol (HTTP) の要求や応答をサイト別に処理することが可能になります。ISAPI フィルタを使えば、認証やアクセス、ログなどをカスタマイズするアプリケーションを作成できます。
ISAPI のフィルタとアプリケーションを併用すれば、非常に複雑なサイトを構築することもできます。さらに、ISAPI の拡張機能とインターネット データベース コネクタを組み合わせることで、高度に対話的なサイトを構築することも可能です。
ISAPI を使用したプログラミングの詳細については、MSDN から入手できる Microsoft Win32 Software Development Kit (SDK)を参照してください。
Microsoft Peer Web Services では、Windows NT で動作し、CGI 仕様に従っているほとんどの 32 ビット アプリケーションを使用することができます。
次の図は、ブラウザ、サーバー、CGI アプリケーションが、どのように CGI を使って情報を交換しているかを示しています。この節の残りでは、この 5 つの部分のプロセスについて説明します。
GET
POST
クライアントは、HTML ページにある以下のいずれかをクリックすることで、CGI プロセスを起動します。
.pl: REG_SZ: C:\RESKIT\PERL\BIN\PERL.EXE %s %s
ここで、それぞれの部分次のような意味を持っています。
2. サーバー疑似命令の後には空行が 1 行なければいけません。
3.空行の後に、アプリケーションがクライアントに返すデータが続きます。
CGI についての詳細は、 http://hoohoo.ncsa.uiuc.edu/cgi/ にある CGI 仕様を参照してください。
スクリプト マッピングを設定することを強くお薦めします。スクリプト マッピングによって、クライアントが実行可能ファイルを要求したときに、正しいインタプリタ (たとえば Cmd.exe) が起動します。
World Wide Web の内容を含むディレクトリは読み込み専用にしてください。Windows NT ファイル システム (NTFS) からダウンロードされることを意図している実行ファイルには読み込みアクセスだけを有効にしてください。
バッチ ファイルを CGI 実行可能ファイルとして実行できます。ただし、サーバーへの潜在的なセキュリティの危険を避けるため、厳重な注意を払わなければなりません。
注意 CGI 実行可能ファイルのファイル名拡張子は .exe または .cgi です。
たとえば、.idc にアクセス権を付加しないで IDC を安全に実行するには、Inetsrv\Httpodbc.dll に、適切なユーザーだけ NTFS 実行アクセス権を許可します。Httpodbc.dll は、IDC を実装する ISAPI アプリケーション DLL の名前です。そうすることで、ユーザーが IDC を実行しようとしたときにはいつでも、サーバーはアクセス権をチェックします。実行アクセス権を得ているユーザーだけがアクセスできます。
注意 一度 ISAPI アプリケーションがロードされると、WWW サービスが停止するまでロードされたままになります。Peer Web Services は、ISAPI アプリケーションがロードされた後までセキュリティ記述子の変更を追跡しません。ISAPI アプリケーションがロードされた後にアクセス権を変更したときには、その変更を有効にするために WWW サービスを停止して再起動する必要があります。
Winnt ディレクトリとそのサブディレクトリのアクセス コントロール リストに注意してください。ISAPI アプリケーションやデータベースの中には、これらのディレクトリにあるファイルや DLL へのアクセスが必要なものがあります。
注意 ISAPI アプリケーション DLL のファイル名拡張子は .dll または .isa です。
また、アプリケーションによって起動されるすべてのプロセスが、十分なアクセス権を持つアカウントを使って動作するようにしてください。たとえば、アプリケーションがほかのファイルを使用するときには、プログラムに割り当てるアカウントがファイルを使用するための適切なアクセス権を持っていることが必要となります。デフォルトでは、アプリケーションは IUSR_computername アカウントで動作します。このアカウントは、実行するアプリケーション ファイルについて、管理者アクセス権と実行アクセス権を持っていなければなりません。
たとえば、ユーザーからの入力が不要なアプリケーションへの HTML リンクは次のようになります。
http://www.company.com/scripts/catalog.exe
この例で、Scripts は対話型アプリケーションの仮想ディレクトリです。
ユーザーからの入力が必要なアプリケーションを作成するには、HTML フォームに関する知識のほかに、ISAPI または CGI によるフォームの使い方に関する知識が必要です。これらの詳細については、インターネットなどで入手できる情報を参照してください。
拡張子 | デフォルトのインタプリタ |
.bat, .cmd | Cmd.exe |
.idc | Httpodbc.dll |
.exe, .com | システム |
その 1 つは、Scrips という仮想ディレクトリにアプリケーションを格納する機構です。実行アクセス権のみ設定されたディレクトリには、管理者だけがプログラムを追加できます。したがって、許可されていないユーザーは、管理者権限を取得しない限り、有害なアプリケーションをコピーして、そのコンピュータ上で実行することはできません。
仮想フォルダに関連付けられたディレクトリに対して、IUSR_computername アカウントに読み込みアクセス権と実行アクセス権を許可し、管理者だけが完全なアクセスをできるようにすることを推奨します。Perl スクリプト (ファイル名拡張子 .pl) および IDC ファイル (ファイル名拡張子 .idc および .htx) は、読み込みアクセス権と実行アクセス権の両方が必要です。しかし、何者かが安全でないファイルをサーバーにインストールできないように、書き込みアクセス権は許可しないでください。
もう 1 つは、WWW サービスに対して匿名ログオンだけを許可するように設定している場合に、リモート ユーザーからのすべての要求で IUSR_computername アカウントが使用されるという機構です。デフォルトでは、管理者から特別にアクセス権を付与されていないかぎり、IUSR_computername アカウントでは Windows NT ファイル システム (NTFS) を使ってファイルの削除や変更を行うことはできません。これにより、万一有害なプログラムがコンピュータにコピーされた場合でも、そのプログラムはサーバーのコンピュータおよびファイルに対して IUSR_computername アクセス権しか持たないため、WWW の内容が大きく損傷を受けることはなくなります。
Web ブラウザ (インターネット エクスプローラ、または Netscape Navigatorなどの他社製ブラウザ) は、HTTP を使用してインターネット サーバーに要求を送信し、その処理を一任します。これに応じて、インターネット サーバーは HTML 形式のドキュメントを返信します。データベースへのアクセスは、Peer Web Services のコンポーネントの 1 つであるインターネット データベース コネクタ (IDC) を通して実現されます。インターネット データベース コネクタ Httpodbc.dll は、ODBC を使用してデータベースにアクセスする ISAPI DLL です。
次の図は、Peer Web Services からデータベースに接続するためのコンポーネントを示したものです。
IDC は、データベースへのアクセス方法と、出力 Web ページのフォーマットを決めるために、インターネット データベース コネクタ (.idc) ファイルと HTML エクステンション (.htx) ファイルという 2 種類のファイルを使用します。
Web ページを含め、この 2 種類のファイルは同一の文字コード セットで記述されていなければなりません。シフト JIS 以外の文字コード セット (JIS および EUC) を使用する場合は、インターネット データベース コネクタ ファイル (.idc) 内に "Charset" フィールドを加え、使用文字コード セットを指定してください。"Charset" についての詳細は、インターネット データベース コネクタ (.idc) ファイルのフィールドを参照してください。
インターネット データベース コネクタ ファイルには、適切な ODBC データ ソースへの接続と SQL ステートメントの実行のために必要な情報が含まれています。また、HTML エクステンション ファイルの名前と位置も記述されています。
HTML エクステンション ファイルは、実際の HTML ドキュメントのテンプレートとなるものです。IDC によってデータベースの情報が埋め込まれた後に、Web ブラウザに返されます。
System DSN は、Windows NT のサービスから ODBC を使用できるようにするために ODBC version 2.5 で導入された機構です。
2. [OK] ボタンをクリックします。
3. [追加/削除] ボタンをクリックします。
4. [OK] ボタンをクリックします。
5. [ODBC ドライバと管理ツール] オプションを選択します。
6. [OK] ボタンをクリックします。
7. [データ ソースの追加] ダイアログ ボックスが表示されます。
8. SQL Server ドライバをインストールするため、[使用可能な ODBC ドライバ] リスト ボックスから SQL Server ドライバを選択して、[OK] ボタンをクリックします。
2. [ODBC] アイコンをダブルクリックします。
ODBC ドライバを既にインストールしている場合は、リスト内にほかのデータ ソースが表示されます。
6. データ ソース名を入力します。
Microsoft SQL Server では、サーバー名、ネットワーク アドレス、[セットアップ] ダイアログ ボックスに表示されるネットワーク ライブラリが、インストールによって変わります。これらのコントロールに何を入力するのか分からない場合は、デフォルトを使用してください。詳細については、[ヘルプ] ボタンをクリックして、ネットワークを説明する節を探してください。
9. [閉じる] ボタンをクリックして [データ ソース] ダイアログ ボックスを閉じます。
10. [OK] ボタンをクリックして、ODBC および DSN のセットアップを完了してください。
次の図は、Dbsamp1.htm を Microsoft インターネット エクスプローラで表示したときの画面です (Peer Web Services が "webserver" という名前のコンピューターにインストールされていると仮定しています)。
"ここをクリックするとクエリーが実行されます。" と書かれたハイパーリンクをクリックすると、別の Uniform Resource Locator (URL) がサーバーに送られます。URL は、次のような形で、このハイパーリンク文章のすぐ前につけられています (表示されないようになっています)。
<A HREF="http://webserver/samples/dbsamp/dbsamp1.idc">ここをクリックするとクエリーが実行されます。</A>
使われる IDC のインターネット データベース コネクタ ファイル (Dbsamp1.idc) が URL の中で参照されています。ファイル名拡張子マッピングがあるので、URL の中で Httpodbc.dll を参照する必要はありません。
Peer Web Services では、このサンプルでインターネット データベース コネクタを使うプロセス全体は、次のダイヤグラムで示されている通り、6 つの段階で処理されます。
field: value
Datasource: Web SQL
Template: sample.htx
Datasource: Web SQL
Username: sa
Template: sample.htx
SQLStatement:
+SELECT au_lname, ytd_sales
+ from pubs.dbo.titleview
+ where ytd_sales>5000
Sample.idc ファイルに含まれているその他の要素には、次のようなものがあります。
Sample.idc の中の SQL ステートメントは、SQL Server の サンプルデータベース "pubs" から、 年間の売上額が 5000 ドルを超えている本の著者のラスト ネームとその売上額を返します。
結果の Web ページは、Microsoft インターネット エクスプローラでは、次のように表示されます。
.htx ファイルは、< %% >または <!--%%--> で囲まれたタグが追加された HTML 文書です。idc ファイルは、このタグを使って、文書に動的データを追加します。.htx ファイル内の HTML の書式は、データが返される場合の一般的な書式です。データベースからのデータをどのように HTML の書式にマージするかを制御する 6 種類のキーワード (begindetail、enddetail、if、else、endif、および "%z") が、.htx ファイルの中にあります。データベースの列の名前は、どのデータが HTML 文書内に返されるかを指定します。たとえば、.htx ファイルの中の次の行は、処理されたそれぞれのレコードから Emailname 列のデータを取り出してマージします。
<%begindetail%><%Emailname%><%enddetail%>
Sample.htx ファイルは、データベースから返されるデータについてのインターネット データベース コネクタ タグを含んだ HTML 文書です (このタグはわかりやすいように太字で記述されています)。HTML の書式の一部は、IDC タグがわかりやすいように、取り除かれています。
<HTML>
<HEAD><TITLE>著者と年間売り上げ</TITLE></HEAD>
<BODY BACKGROUND="/samples/images/backgrnd.gif">
<BODY BGCOLOR="FFFFFF">
<TABLE>
<TR>
<TD><IMG SRC="/samples/images/SPACE.gif" ALIGN="top" ALT=" "></TD>
<TD><A HREF="/samples/IMAGES/db_mh.map"><IMG SRC="/SAMPLES/images/db_mh.gif" ismap BORDER=0 ALIGN="top" ALT=" "></A></TD>
</TR>
<tr>
<TD></TD>
<TD>
<hr>
<font size=2>
<CENTER>
<%if idc.sales eq ""%>
<H2>売り上げが <I>5000</I> 以上の著者</H2>
<%else%>
<H2>売り上げが <I><%idc.sales%></I> 以上の著者</H2>
<%endif%>
<P>
<TABLE BORDER>
<%begindetail%>
<%if CurrentRecord EQ 0 %>
<caption>検索結果:</caption>
<TR>
<TH><B>著者</B></TH><TH><B>年間売り上げ<BR>(US ドル)</B></TH>
</TR>
<%endif%>
<TR><TD><%au_lname%></TD><TD align="right">$<%ytd_sales%></TD></TR>
<%enddetail%>
<P>
</TABLE>
</center>
<P>
<%if CurrentRecord EQ 0 %>
<I><B>売り上げが </I><%idc.sales%> 以上の著者はいません。</B>
<P>
<%else%>
<HR>
<I>
この WEB ページは、SQL クエリー結果と SAMPLE.HTX テンプレート ファイルとを
結合して作成されています。
<P>
結合は、Microsoft Internet Database Connector によって行われ、
Microsoft Internet Information Server によって結合結果が
この WEB ブラウザに送られています。
</I>
<%endif%>
</font>
</td>
</tr>
</table>
</BODY>
</HTML>
<%begindetail%> セクションと <%enddetail%> セクションが、データベースから返された行が文書中のどこに表示されるかを区切っています。クエリーから返された列は、<%%> で囲んで表示されます。この例では、 <%au_lname%> と <%ytd_sales%> のようになっています。
たとえば、先ほどの節では Sample.idc のクエリーは、売り上げが 5000 以上の著者しか返しませんでした。パラメータを使うことで、ユーザーに 5000 のかわりにどの数を使うかを決めてもらう Web ページを作成できます。
この Web ページは、売り上げの数値をユーザーに尋ね、それに関連する変数を "sales" と名付けます。Dbsamp2.htm は、数値を受け取るための入力フィールドがついたフォームを表示します。
Sample2.htm で使われている、入力フィールドとボタンのための書式は次の通りです。
<FORM METHOD="POST" ACTION="/scripts/samples/sample2.idc">
<P>
年間売上数を入力してください: <INPUT NAME="sales" VALUE="5000" >
<P>
<INPUT TYPE="SUBMIT" VALUE="クエリーを実行">
</FORM>
インターネット データベース コネクタ ファイル Sample2.idc では、数値 5000 のかわりに、太字で示されたパラメータを使用します。
SQLStatement:
+SELECT au_lname, ytd_sales
+ from pubs.dbo.titleview
+ where ytd_sales > %sales%
ここで、パラメータ名は "sales" でなければいけません。これは Web ページの <INPUT NAME= "sales"> と関係しているからです。パラメータは、SQL の通常の識別子と区別するために百分率記号 (%) で囲む必要があります。インターネット データベース コネクタは、.idc ファイルの中にパラメータを見つけると、Web ブラウザから送られた値に置き換えて、それから ODBC ドライバに SQL ステートメントを送ります。
百分率記号 (%) は、SQL ではワイルドカード文字としても使われます。SQL クエリーのなかで ワイルドカードを使うことで、表の中から特定の文字列を含む要素だけを探すことができます。SQL ワイルドカードのために "%" を 1 文字入れるには、"%%" と入力してください。これにより、IDC はこの % をパラメータの印として使わないようになります。たとえば、次のようにします。
SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%%%title%%%'
SQL ワイルドカードとして使うために百分率記号を 2 つ並べた後、文字列をパラメータとして囲むためにさらに 1 つ百分率記号をつけます。この例では、クエリーはタイトル列に title という単語を含むすべてのエントリを検索します。このクエリーは次のようなものを返します。
title
title and deed
main title page
author and title
最初の 5 文字に title と書かれたすべてのエントリを返すには、次のようにクエリーを記述します。
SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%title%%%'
この例では、次のような結果が返されます。
title
title and deed
最後の 5 文字に title と書かれたすべてのエントリを返すには、次のようにクエリーを記述します。
SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%%%title%'
この例では、次のような結果が返されます。
title
author and title
クエリーの出力で、他のクエリーへのリンクを作成することで、より強力な Web ページを作り出すことができます。たとえば、著者の名前を普通のテキストで返すかわりに、リンク書式を使って、そのリンクで他のクエリーを動かしてそれぞれの著者の著書名を見せる、といったことができます。
Peer Web Services にある別の例では、この種類のリンクをどのようにして行うかを示しています。Dbsamp3.htm を使うと、Sample3.idc のクエリーが実行され、Sample3.htx を出力テンプレートとして結果を返します。Sample3.htx は、著者のラストネームをリンクで返し、そこをクリックすると、Sample3a.idc と Sample3.htx を使ってそれぞれの著者の著書名を表示するようになっています。
インターネット データベース コネクタ (.idc) ファイル内の必須フィールド
フィールド | 説明 |
Datasource | ODBC Administrator またはサンプルで提供されたツールを使って、以前に作成した ODBC システム データ ソース名 (DSN) に一致する名前。 |
Template | このクエリーから返されたデータをフォーマットするHTML エクステンション ファイルの名前。通常これらのファイルは、拡張子 .htx を使います。 |
SQLStatement | 実行する SQL ステートメント。SQL ステートメントは、パラメータ値を含むことができます。パラメータ値は、クライアントから百分率記号 (%) で囲まれている必要があります。SQL ステートメントは、インターネット データベース コネクタ ファイルで複数の行を占めることができます。SQLStatement フィールドに続く、プラス記号 (+) で始まる各行は、SQLStatement フィールドの一部とみなされます。複数の SQLStatements が同じファイルに現れることができます。 |
フィールド | 説明 | ||||||||||
Charset | HTM、HTX、IDC の各ファイルで使用する文字コードを指定します。この 3 種類のファイルは、同じ文字コードで記述されている必要があります。JIS の場合は iso-2022-jp、EUC の場合は x-euc-jp、シフト JIS の場合は x-sjis を指定します。指定しない場合には x-sjis になります。 | ||||||||||
DefaultParameters = param=value
[, param=value]
|
インターネット データベース コネクタ ファイルにおいて、クライアントがパラメータを指定しない場合に使われるパラメータ値のデフォルト (もしあれば)。 | ||||||||||
Expires | キャッシュに保存された出力ページを更新するまでに待機する秒数。同一の要求が続くのであれば、データベースにアクセスすることなく、キャッシュに保存されたページが返されるので、Expires フィールドは便利です。一定の時間が経過した後に、データベースの再クエリーを強制するのに便利です。IDC は、デフォルトでは、出力ページをキャッシュに保存しません。IDC は、Expires フィールドが使われている場合のみ、キャッシュに保存します。 | ||||||||||
MaxFieldSize | フィールド単位で IDC によって割り当てられる最大バッファ容量です。これを超える文字は、すべて省略されます。このパラメータは、8192 バイトを超える、データベースから返されるフィールドにのみ適用されます。デフォルトの値は、8192 バイトです。 | ||||||||||
MaxRecords | IDC が 1 回のクエリーで返す最大のレコード数です。MaxRecords の値は、デフォルトでは設定されていません。これは、クエリーが40 億までのレコードを返せるということを示しています。返されるレコード数を制限するには、この値を設定します。 | ||||||||||
ODBCConnection | このフィールドに pool の値を挿入して、接続プールとの接続を追加します。接続プールは、データベースとの接続を将来の要求のために開いたままにしておきます。このとき、プールされた接続を通じて、 Datasource、Username、および Password と同じ値を含む .idc ファイルを続いて実行するために、IDC はデータを送信します。このオプションを設定すると、インターネット データベース コネクタを使用したパフォーマンスが改善されます。また、このオプションを設定する .idc ファイルの接続が接続プールから確保されないように指定する nonpool オプションもあります。接続のキャッシュのをより精密に管理するには、このフィールドの値を nopool に設定します。また、 現在の接続数に制限がある場合、すべての接続を接続プールに独占させないでください。さもなければ、すべてのユーザーが SQL Server に接続できなくなります。
注意 接続プールのデフォルトを設定するには、PoolIDCConnections レジストリ エントリを 1 に設定する必要があります。詳細については、「第 10 章 レジストリ エントリの設定」を参照してください。
Password |
ユーザー名に対応したパスワードです。パスワードが空の場合、このフィールドは省略可能です。
| RequiredParameters |
Httpodbc.dll が確保するパラメータ名は、(もしあれば) クライアントに渡されます。それ以外の場合は、エラーを返します。パラメータ名は、カンマで区切ります。
| Translationfile |
ブラウザが適切に HTML 形式で (à、ô、éといった) 非英語文字を表示できるよう、それらをマップするファイルへのパスです。ファイルが .idc ファイルと同じディレクトリに無い場合、トランスレーション ファイルのフルパスを入力する必要があります。構文 : Translationfile: C:\directoryname\filename。英語以外の言語でデータベースをパブシッリュする場合は、Translationfile フィールドを使ってください。トランスレーション ファイルは、value=string | Username |
Datasource フィールドで指定されているデータ ソース名に有効なユーザー名です。
| 注意 Microsoft SQL Server を統合セキュリティ オプションとともに使っている場合、.idc ファイル内のユーザー名とパスワードのフィールドは、無視されます。SQL Server へのログオンは、Web ユーザーの認証を使って実行されます。要求が匿名ユーザーとして行われた場合、ユーザー名とパスワードは、インターネット サービス マネージャ内の匿名ユーザーの設定 (デフォルトでは、IUSR_computername) によって決定されます。クライアントの要求がログオン認証を含んでいる場合、エンド ユーザーによって供給されるユーザー名とパスワードが、SQL Server へのログオンに使用されます。 Content-Type |
クライアントに何が返されるかを記述する、任意の有効な MIME タイプです。.htx ファイルが HTML を含んでいる場合、ほとんど常に、"text/html" です。
| |
ODBCOptions: Option Name=Value[,Option Name=Value...]
たとえば、SQL ステートメントが 10 秒以上実行し続けないようにし、ODBC 関数呼び出しの記録を可能にするには、IDC ファイル内で、次のように指定します。
ODBCOptions: SQL_QUERY_TIMEOUT=10, SQL_OPT_TRACE=1, SQL_OPT_TRACEFILE=C:\Sql.log
次の表に、すべてのオプションを説明します。
オプション名 | 値 | 目的 | ||||||
SQL_ACCESS_MODE | 0 = 読み取り/書き込み 1 = 読み取りのみ |
接続が更新を引き起こす SQL ステートメントをサポートする必要がないODBC ドライバまたはデータ ソースの指示子です。このモードを使って、ロック ストラテジ、トランザクション管理やドライバまたはデータソースに適した領域を最適化することができます。このようなドライバは、更新をともなう SQL ステートメントを、データ ソースに送信されるのを防ぐ必要がありません。 読み取りのみの接続の最中に読み取りのみでない SQL ステートメントを処理するよう要求されたときのドライバとデータ ソースの動作は、定義実行です。SQL_ACCESS_MODE は、デフォルトでは 0 に設定されます。これは、読み取りと書き込みを許します。 | ||||||
SQL_LOGIN_TIMEOUT | 整数 | 接続を切断するのにログオン要求が待機する秒数です。デフォルトは、ドライバ依存で、0 でない必要があります。値が 0 の場合、タイムアウトはオフになり、接続試行は、無限に待機します。指定されたタイムアウトが、データ ソースの最大ログオン タイムアウトを超えている場合は、ドライバはその値に代替します。 | ||||||
SQL_OPT_TRACE | 0 = トレース オフ
1 = トレース オン |
トレースがオンのとき、Httpodbc.dll によってなされる各 ODBC 関数呼び出しは、トレース ファイルに書き出されます。SQL_OPT_TRACEFILE オプションを使ってトレース ファイルを指定できます。ファイルがすでに存在する場合は、ODBC はそのファイルに追加します。それ以外の場合は、そのファイルを作成します。トレースがオンで、トレース ファイルが指定されていない場合は、ODBC はファイル Sql.log に書き出します。 | ||||||
SQL_OPT_TRACEFILE | ファイル名 | SQL_OPT_TRACE=1 の場合に使用されるトレース ファイルの名前です。デフォルトは SQL.LOG です。 | ||||||
SQL_PACKET_SIZE | 整数 | データベース管理システム (DBMS) と Web サーバーとの間で情報を交換するネットワーク パケット サイズ (バイト単位) です。 注意 多くのデータ ソースが、このオプションをサポートしていないか、またはネットワーク パケット サイズだけを返します。指定されたサイズが最大パケット サイズを超過している場合、または最小パケット サイズより小さい場合は、ドライバはこの値を代替します。 | ||||||
SQL_TRANSLATE_DLL | ファイル名 | ドライバがロードして、文字セットの変換のようなタスクを実行するのに使う、SQLDriverToDataSource 関数と SQLDataSourceToDriver 関数を含む DLL の名前です。 | ||||||
SQL_TRANSLATE_OPTION | 整数 | 使用される変換 DLL に固有の変換機能を管理する値です。詳細については、ドライバと変換 DLL のマニュアルを参照してください。 | ||||||
SQL_TXN_ISOLATION | 整数
1=Read Uncommited 2=Read Committed 4=Repeatable Read 8=Serializable 16=Versioning |
トランザクション分離レベルを設定します。インターネット データベース コネクタは、.idc ファイルに指定できる以外のトランザクションの分離レベルをサポートしていません。 ただし、一部の DBMS では、SQL_TXN_ISOLATION オプションを 1 (Read Uncommited) に設定すると、高度の並列性をもたらし、このためより良いパフォーマンスが得られます。ただし、この設定では、ほかのトランザクションにりコミットされないデータは、回復されます。 | ||||||
SQL_MAX_LENGTH | 整数 | ドライバが、文字列またはバイナリ列から返すデータの最大量です。このオプションは、ネットワーク トラフィックを削減することを意図しており、(ドライバに対置された) 複数の段のデータ ソースがそれを実行できる場合にのみ、使用してください。 | ||||||
SQL_MAX_ROWS | 整数 | SELECT ステートメントに返される最大行数です。値が 0 (デフォルト) に等しい場合、ドライバはすべての行を返します。このオプションは、インターネット データベース コネクタ内の組込み関数 MaxRecords に対置された、データ ソース自体が返される行を制限できるときに、ネットワーク トラフィックを削減する場合に使用します。 | ||||||
SQL_NOSCAN | 0=エスケープ句をスキャンしてコンバートします
1=エスケープ句をスキャンしないでコンバートします |
ドライバがエスケープ句で SQL 文字列をスキャンするかどうかを指定します。0 (デフォルト) に設定されている場合、ドライバは、エスケープ句で SQL 文字列をスキャンします。1 に設定されている場合、ドライバは、エスケープ句で SQL 文字列をスキャンせず、その代わりに、ステートメントを直接データ ソースに送ります。SQL ステートメントが ODBC エスケープ句をまったく含まず、大括弧 ( { } ) で囲まれた特別の構文がある場合、このオプションを 1 に設定すると、SQL 文字列をスキャンしないようドライバに指示して、パフォーマンスを少しだけ向上させます。
SQL_QUERY_TIMEOUT |
整数
|
0=タイムアウトなし クエリーをキャンセルするのに SQL ステートメントが待機する秒数です。0 (デフォルト) に設定されている場合、タイムアウトはありません。指定されたタイムアウトがデータ ソースの最大タイム アウトを超過しているか、または最小タイムアウトよりも小さい場合、ドライバはこの値を代替します。
| Integer |
ドライバ依存 |
ドライバ依存のオプション値は、number=value の形式で指定されます。たとえば、次のようになります。 4322=1, 234=String
| |
例として、HTML フォームのなかに下に示すような複数選択のリストボックスがあるとします。
<SELECT MULTIPLE NAME="region">
<OPTION VALUE="Western">
<OPTION VALUE="Eastern">
<OPTION VALUE="Northern">
<OPTION VALUE="Southern">
</SELECT>
このとき、.idc ファイルでは、次のような SQL ステートメントを使います。
SQLStatement: SELECT name, region FROM customer WHERE region IN ('%region%')
ユーザーが "Northern"、"Western"、および "Eastern" をこの HTML フォームから選択した場合は、この SQL ステートメントは次のように変換されます。
SELECT name, region FROM customer WHERE region IN ('Northern', 'Western', 'Eastern')
HTML フォームのもう 1 つの例を次に示します。こちらは数値データを使っているので、.idc ファイルのパラメータには引用符が付けられていません。
<SELECT MULTIPLE NAME="year">
<OPTION VALUE="1994">
<OPTION VALUE="1995">
<OPTION VALUE="1996">
</SELECT>
このとき、.idc ファイルでは、次のような SQL ステートメントを使います。
SQLStatement: SELECT product, sales_year FROM sales WHERE sales_year IN (%year%)
ユーザーが "1994" および "1995" をこの HTML フォームから選択した場合は、この SQL ステートメントは次のように変換されます。
SELECT product, sales_year FROM sales WHERE sales_year IN (1994, 1995)
SQLStatement:
+insert into perf(testtime, tag) values (getdate(), '%tag%')
+SELECT au_lname, ytd_sales from pubs.dbo.titleview where ytd_sales>5000
+SELECT count(*) as nrecs from pubs.dbo.titleview where ytd_sales>5000
SQLStatement:
+insert into perf(testtime, tag) values (getdate(), '%tag%')
SQLStatement:
+SELECT au_lname, ytd_sales from pubs.dbo.titleview where ytd_sales>5000
SQLStatement:
+SELECT count(*) as nrecs from pubs.dbo.titleview where ytd_sales>5000
バッチ クエリーは、すべて同時に実行されますが、多重クエリーは 1 つずつ処理されます。そのため、データベースがバッチ クエリーを取り扱えるときには、バッチとしてクエリーを構成するほうが、パフォーマンスが向上するでしょう。
<%begindetail%>
<%au_lname%>: <%ytd_sales%>
<%enddetail%>
この例は、au_lname と ytd_sales の 2 つの列の一覧を出力します。どの列もこの方法で参照できます。列名は、HTML エクステンション ファイルの他のどの場所で使用してもかまいません。
注意クエリーから返されるレコードがない場合、<%begindetail%> の領域はスキップされます。結果の集合を返す SQL ステートメント (たとえば SELECT) が複数ある場合は、それぞれに対応するように、<%begindetail%> <%enddetail%> 領域を .htx ファイル中に置くようにします。
<%begindetail%><%if CurrentRecord EQ 0 %>
クエリーの結果です
</BODY>
<B>Author YTD Sales<BR></B>
<%endif%>
<%au_lname%><%ytd_sales%>
<%enddetail%>
<P>
<%if CurrentRecord EQ 0 %>
<I><B>Sorry, no authors had YTD sales greater than </I><%idc.sales%>.</B>
<P>
<%else%>
<HR>
<I>
The Web page you see here was created by merging the results of the SQL query with the template file Sample.htx.
<P>
The merge was done by the Microsoft Internet Database Connector and the results were returned to this Web browser by the Microsoft Peer Web Services
</I>
<%endif%>
</HTML>
一般的な書式は次の通りです。
<%if condition %>
HTML text
[<%else%>
HTML text]
<%endif%>
ここで、condition は次の形をしています。
そして、operator には次のいずれかを使用できます。
operator | 説明 |
EQ | value1 と value2 が等しいか |
LT | value1 が value2 より小さいか |
GT | value1 が value2 より大きいか FONT> |
CONTAINS | value1 の一部分に文字列 value2 が含まれているか |
<%begindetail%>
<%if au_lname EQ "Green"%>
this guy is green!
<%endif%>
<%enddetail%>
<%if%> ステートメントは、また、HTTP 変数の情報に基づいて特別な処理を行わせるためにも使用できます。たとえば、クライアントの Web ブラウザの種類によって異なるページを表示するには、次のような記述を HTML エクステンション ファイルに埋め込みます。
<%if HTTP_USER_AGENT contains "Mozilla"%>
client supports advanced HTML features
<%else%>
client is <%HTTP_USER_AGENT%>
<%endif%>
インターネット データベース コネクタ ファイルからのパラメータを、HTML エクステンション ファイルからアクセスするときには、パラメータの名前の頭に "idc" とピリオドをつけます。先に示した Sample3.htx では、パラメータ %sales% の値を示すために、次のような行を入れています。
The value of the sales parameter is: <%idc.sales%>
2. ダッシュをすべて下線に変える。
3. 文字をすべて大文字にする。
次の表は、デフォルトの変数の一覧です。これらは、CGI アプリケーションには環境変数として、IDC アプリケーションには HTTP 変数として渡されます。
Peer Web Services サーバー変数
変数 | 意味 |
ALL_HTTP | すべての HTTP ヘッダはこの一覧の変数のように処理されていない形で含まれています。この変数は HTTP_<ヘッダ フィールド名> の形式をしています。たとえば、次のようになっています。HTTP_ACCEPT: */*, q=0.300, audio/x-aiff, audio/basic, image/jpeg, image/gif, text/plain, text/html |
AUTH_TYPE | 使用されている認証のタイプです。ユーザー名がサーバーに認証されている場合、Basic が含まれます。それ以外の場合は存在しません。 |
CONTENT_LENGTH | スクリプトがクライアントから受け取ると予想しているバイト数です。 |
CONTENT_TYPE | POST 要求の本体で渡された情報の内容の種類です。 |
GATEWAY_INTERFACE | このサーバーが準拠している CGI (Common Gateway Interface) 指定のリビジョンです。 |
HTTP_ACCEPT | 特別な種類の HTTP ヘッダです。Accept フィールドの値が連結され、カンマ (,) で区切られます。たとえば、HTTP ヘッダの一部が次のようになっているとします。accept: */*; q=0.1HTTP_ACCEPT 変数は、次の値を持ちます。 */*; q=0.1, text/html, image/jpeg |
LOGON_USER | このユーザーの Windows NT アカウントです。 |
PATH_INFO | クライアントによる、追加のパス情報です。これは、URL の中の、スクリプト名の後、クエリー文字列の前にある部分 (もしあれば) です。 |
PATH_TRANSLATED | PATH_INFO の値ですが、仮想パス名がディレクトリしていに展開されています。 |
QUERY_STRING | このスクリプトを参照した URL で疑問符 (?) の後に続く情報です。 |
REMOTE_ADDR | クライアントの IP アドレスです。 |
REMOTE_HOST | クライアントのホスト名です。 |
REMOTE_USER | クライアントによって供給され、サーバーに認証されたユーザー名です。 |
REQUEST_METHOD | HTTP 要求のメソッドです。 |
SCRIPT_NAME | 実行されているスクリプト プログラムの名前です。 |
SERVER_NAME | 自分を参照する URL の中で現れる、サーバーのホスト名 (または IP アドレス) です。 |
SERVER_PORT | 要求を受け取った TCP/IP ポートです。 |
SERVER_PORT_SECURE | 値は 0 または 1 です。1 の場合は、要求が暗号化されたポートから行われたことを示します。 |
SERVER_PROTOCOL | この要求に関連して情報を取り出すプロトコルの名前とバージョンです。通常は HTTP/1.0 です。 |
SERVER_SOFTWARE | インターネット サーバー エクステンションが動作している Web サーバーの名前とバージョンです。 |
URL | 要求の URL です。 |
(C) 1996 by Microsoft Corporation. All rights reserved.