ASP.NET で偽装する

温度計を Web Service にしてなんてことを考えて、Administrator 権限が必要な OpenLibSys を Web Service 化するには、偽装しなければならない。その他、きっとはまるだろうと思いつつ、やっぱり引っかかりますね。

Web.config で

<configuration>
  <system.web>
    <identity impersonate="true" userName="ホスト名\Administrator" password="パスワード" />
   …

と追加して、実行すると、

‘/’ アプリケーションでサーバー エラーが発生しました。 構成にエラーがあります。

説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。
パーサー エラー メッセージ: 構成ファイルで指定された資格情報から Windows ユーザー トークンを作成できません。オペレーティング システム ‘ログオン失敗: アカウントは現在無効に設定されています。
‘ のエラーです。

というエラーが発生。Vista では、Administrator アカウントが無効になっているので、

[管理ツール] → [ローカル セキュリティ ポリシー]

image

これを有効にしてみた。すると、このエラーは、無事解決。

しかし、InitializeOls(); を呼ぶところで引っかかっている。サービス側なので、デバッグが厄介だな・・・

この原因は、WinRing0.sys を Visual Studio のデバッグ環境で、Web Service から呼び出すときに、OlsDll.cpp の Initialize()関数の中で、ドライバーを呼び出すときにディレクトリが、 “C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\WinRing0.sys” になってしまい、OLS_DLL_DRIVER_NOT_FOUND エラーになってしまう。暫定で、その場所に WinRing0.sys をコピーして先に進んでみる。

次に、Web Service をローカルの IIS に発行してみると、こんどは “c:\windows\system32\inetsrv\WinRing0.sys” を探しに行ってエラーになる。そこに、WinRing0.sys をコピーすることで、Web Service から OpenLibSys を呼び出せるようになった。

あれ? Vista IIS 7 で Web Service が動かない・・・

温度計をWeb Serviceにしてしまおうかと思って、久々にWeb Service を作って、ローカルの Vista に発行してみたら、

「IIS 7.0 でホストされている Web サイトにアクセスすると、エラー メッセージ:"HTTP エラー 500.19-内部サーバー エラー"」 というエラーで Web Service が動かない。

http://support.microsoft.com/kb/942055/ja

に対処方法が書かれていたので、その通りにしてみたが症状は変わらず。

あれれ? ということで、いろいろ調べていたら、[コントロール パネル] → [プログラムと機能] → [Windows の機能を有効化または無効化] → [アプリケーション開発機能] の ASP.NET のチェックがされていなかった。

VISTA を入れて、Visual Studio 2008 を標準インストールしただけで特に何もしていないはずなので、標準インストールでは ASP.NETは ON にならないのかな?

image

このチェックを入れたら、無事動いた。

Windows Vista IIS で ASP.NET を動かすための設定は、

http://msdn.microsoft.com/ja-jp/library/aa964620.aspx

に書かれています。
エラーメッセージからサポートオンラインの情報を引いたのだけれど、その情報に惑わされてしまった。というわけで、またはまりそうなので、一応メモっておこう。

Visual Studio 2008 で、ASP.NET 開発サーバーが動かない原因判明

http://blogs.msdn.com/webdevtools/archive/2009/03/13/asp-net-web-development-server-stops-working.aspx

Visual Studio Web Developer Team Blog より、ASP.NET Web Development Server Stops Workingという記事を発見。

Windows Defender and Microsoft Forefront Client Security signature file (1.53.256.0) に対応するために、2009年3月9日 8:45 PM (PST) の対応で、ホストファイルから localhostが削除されている。

解決するためには、 C:\Windows\System32\drivers\etc\hosts

のエントリを次のように修正すればよい。

127.0.0.1       localhost

1.53.288.0での修正版がその直後の March 9, 2009  8:57 PM に出ているということで、それ以降は大丈夫みたいだけど。

で、hosts ファイルをみてみたら、

::1             localhost

となっている。IPV6?

とりあええず、これを

127.0.0.1       localhost

と修正して、無事復旧。

ASP.NET ルーティング 続き on 2003 Server

この前の ASP.NET ルーティングは、VS2008 + Vista ASP.NET開発サーバーであっさり動きました。

ところが、2003 Server で試してみると動かない。

???ということで調べてみると、

IIS の Web サイトのプロパティ → ホームディレクトリ タブ → 構成ボタンを押し下げます。

image

すると、アプリケーションの構成ダイアログが表示されます。

image 

ここで、ワイルドカード アプリケーション マップで、挿入ボンタンを押す。

image

c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll を指定し、

ファイルの存在を確認する チェックボックスを外す。

これにより該当しないファイル拡張子の場合、aspnet_isapi.dll で、ルーティングが追加されていないかどうか確認するようになりました。

HTML の圧縮

TechEd 2007 でのセッションで、どのセッションか忘れてしまったが、HTMLのサイズを圧縮し、高速化するヒントとして2つ紹介されていた。WZero3のメモ帳にメモってあるだけで忘れそうなので、メモ。
 
  1. Visual Studio で[ツール]→[オプション]→[HTML]で、デフォルトでは[空白の挿入]になっているので、空白が多い場合にはページのサイズが大きくなってしまう。これを[タブの保持]にする。場合によってはサイズが 1/3 ぐらいになる。
  2. IISで、HTTP 1.1 圧縮を使う。
    http://www.port80software.com/ で、どの程度圧縮されているのか、確認することができる。
    とあるページを試しにやってみたら、圧縮により サイズが 1/5  になる。

Login.aspx がエラーになる

次のエラーになった場合、ファイル名とクラス名がかぶっている
ことが原因のようだ。

Source Error:

Line 118: public login_aspx() {
Line 119: string[] dependencies;
Line 120: ((Login)(this)).AppRelativeVirtualPath = "~/Login.aspx";
Line 121: if ((global::ASP.login_aspx.@__initialized == false)) {
Line 122: dependencies = new string[3];

Source File: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET Files
oot\23c2a77e\aa6cf731\App_Web_login.aspx.cdcab7d2.iei5x67s.0.cs Line: 120

http://geekswithblogs.net/azamsharp/archive/2006/05/31/80286.aspx

Login.aspx のファイル名をリネームするだけでは
クラス名はそのままなのでだめです。
Login.aspxのファイルを削除して別名で作成するか、
クラス名を変更する必要があります。

予期しないエラー 0x8ffe2740 でIISが起動できない

クラッシュしたはずみに、IISが予期しないエラー 0x8ffe2740 で起動できなくなった。

Skypeが原因だった。

http://blogs.shintak.info/archive/2005/05/16/5456.aspx

これで、無事復活。

しばらくSkypeと同居していて問題なかったのだけど・・・、XPクラッシュを引き金に突然ですから・・・あせりました。