2009年9月10日木曜日

[IIS]IISで指定の拡張子のファイルをクライアントに見せなくする

たとえば、xmlファイルを公開フォルダ内においていた場合、
デフォルトの設定だとクライアントから要求があれば見えてしまいます。
それを見えなくする方法があります。これはIIS6.0以上のバージョンの場合です。

まず、IISを止めて%SystemRoot%\system32\inetsrv\MetaBase.xmlを開きます。
その中の<IISMimeMap>タグを見てください。

<IISMimeMap Location = "/LM/MimeMap"
MimeMap=".asx,vide/x-ms-asf
.xml,text/xml
.tsv,text/tab-separated-values
(略)
">
</IIsMimeMap>

なんて感じになっていると思います。
これの「.xml,text/xml」行を消しちゃいます。

これでOKです。

ブラウザからxmlファイルにアクセスすると 404エラーが返されると思います。
また、これは仮想ディレクトリ単位では出来ず、サイト単位でしかできないようです。


ついでにIIS5.1(XP Proとか)の場合なんですが、MetaBase.xmlが無くて、MetaBase.binというバイナリに
設定情報が書かれています。その為、直接の編集は出来ず、編集方法が良くわかりませんでした。

ですが、URLScanってツールを使うと実現できます。
これをダウンロード、インストールすると%SystemRoot%\system32\inetsrv\URLScanってフォルダに展開されています。
このファイルのURLScan.iniに見せたくないファイルの拡張子を指定することが出来ます。

Optionsセクションで、UseAllowExtensionsの値が0だとDenyExtensionsが有効、値が1だとAllowExtensionsが有効と言うこと。

[AllowExtensions] --- 見せるファイル
[DenyExtensions] --- 見せないファイル

ここのDenyExtensionsセクションに「.xml」を足してやるとクライアントから要求されても送信しない
です。

もしくはUseAllowExtensionsを1にして、見せる拡張子をひたすら書くと。
このほうが安心ですかね。メンドクサイけど。

で、こいつはIIS6でも動くみたいですね。

2009年9月2日水曜日

[.Net] .NetでのCOM相互運用

.Netで作成したDLLをCOM(ActiveX?)としても使うようにするためのメモ

まずはクラスライブラリとしてプロジェクトを作成します。
プロジェクトのプロパティでアプリケーションタブ内のアセンブリ情報から「アセンブリをCOM参照可能にする」にチェックを入れます。
あとは、コンパイルタブの「COM相互運用機能の登録」にもチェックを入れておくと、デバッグとかが楽かも。
プロジェクトにクラスを足すときは、「COMクラス」を使うのがお勧めです。

次に、COMの確認。
VBSファイルを作ってやるとか、VB6を使うとか、CraeteObjectで呼んでみるとかがありますね。

Dim obj
Set obj = CreateObject("ClassLibrary1.ComClass1")
MsgBox o.MethodTest()

こんな感じですかね。

後は、VSの入っていない環境にCOMを設定する方法。
WinXPとFramework 2.0の場合で具体例で書きます。
コマンドプロンプトで「C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727」に移動します。
でコマンド「regasm [DLLの絶対パス] /tlb /codebase」を実行します。
ワーニングが出ますが成功って感じです。

このコマンド、「/codebase」をつけないとうまくいかないんですよね。
/codebaseをつけないと、登録しただけではうまく動かなくて、/unregisterするとうまくいって。。。
色々やりすぎて原因不明です。このまま迷宮に入れておきます。

メソッドの修正とかしてもモジュールを上書きするだけでOKです。
(クラスの追加、削除は再登録がいるかも?)
これがアセンブリの著名をつけない時のメリットですね。
アセンブリの著名をつけちゃうと、GACに登録はされますが、
バージョン管理をきっちりやる必要が出てきます。
ちょっとやってみたんですけど、バージョンダウンして動かすことが出来ませんでした。
これはそのうち解決したいです。

以下はその他の気になった点のメモです。
・Object型をCOM公開すると警告(BC42102)が出るが問題なし
  →プロジェクトファイルに以下の文を追加で出なくなる
+Project
 +PropertyGroup
  <NoWarn>42102</NoWarn>

・オーバーロードと可変引数は使えない
・自作クラスを継承したクラスがうまく公開できない(たぶん個人的な知識不足が原因)

・・・いつか、この記事をまとめなおそう。。。