CSMemo011

IIS 設定


 コンパネ→管理ツール→インターネットインフォメーションサービス
 デフォルトはセキュア設定なのでいろいろ変える必要有り。

 ちなみにサービスのポート番号変更はIIS動作中でもでき、
 変更した瞬間から有効(再起動不要)。
 MSのくせに生意気だ。

ClickOnceの動作


 Mozilla FireFox2.0、Netscape7.1では動作しない模様。
 IE限定か!?
 さすがMS。

【2010.01.30のボクが注釈】しょうがないじゃんだってEXEを直接実行できない仕様なんだから・・・

VisualStudio 2005でWebアプリケーション(aspxとか)を作るには、

WebApplicationProjects をインストールする必要がありそうだが、
英語版しかない模様。
また、これを入れるためにはVS2005のアップデートが必要である旨を
いわれる。
└→アップデータがエラーになる。英語版と日本語版は互換性がないのか!?
└→Visual Web Developer 2005 Express Edition を入れて解決。

c:\inetpub\wwwroot\ に

aspxファイルやらasmxファイルやらを置いたが、
「XML パースエラー: 整形式になっていません。」とかいうエラーがブラウザに表示される。
ぐぐってみて、「ファイルの文字コードがShift_JISなのが悪いのか?」と思い、
UTF-8にするも効果なし。そもそも全角文字未使用。

IISの設定画面からASP.NETのタブをクリックし、バージョンを変えてみるが効果なし。
ただ、ファイルの場所 という項目に c:\inetpub\wwwroot\web.config
とあったので、「このファイルが必要に相違ない」と思い、
VWDの適当なプロジェクトからコピー。

web.configについてのエラーがでるようになった。
そこで、ファイル名を_web.configと変えたところ、
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\root\...への
アクセス権がありません 的なメッセージがブラウザに表示された
# こんなもんそんなとこに表示していいのか?(汗)

【2010.01.30のボクが注釈】確か外からアクセスした場合はそいつは表示されなかったから問題なかった気がするぞ。

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\ までは存在するが、
その下にrootフォルダは無し。
そこで、C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files を
「everyone - フルコントロール」にしたところ、話が先に進んだ(いいのか!?笑)
# 実際にはWebサービスを動かしているアカウントに対してのみフルコントロールにすべきだろう。

Web.configの問題箇所をコメントアウトしたところ、やっと
aspx(asmx)解析エラーに話が移った。

aspxは、web.configに何も書かない(むしろなくてよい)状態で動いた。
ということはやはり重要なのはFrameWorkフォルダのパーミッションであるようだ。

asmxでエラー(2007/03/15)

お次はasmxである。
「@ITハイブックス:VB.NETによる XML Webサービス開発」
http://hybooks.atmarkit.co.jp/stand/2003/vbnet/ch06/060301.html
のサンプルや、


ファイルまたはアセンブリ名 x1lwft16.dll、またはその依存関係の 1 つが見つかりませんでした。

というエラーになる。ちなみにこのアセンブリ名はリロードするたびに変わるので、
どうやら動的に生成されるDLLであり、設置ミスとかではなさそうだ。
# リロードする度に生成されるってことは、asmxってJavaサーブレットよりも
# 遅いんじゃあ!?(汗)
# PerlのCGIなんかと同じと思えばいいか。

【2010.01.30のボクが注釈】Perlもコンパイルされてから実行されるんじゃなかったっけか。

ぐぐってみたところ、以下のサイト発見。
http://osada.bz/SyndicationService.asmx/GetRssCategory?categoryName=.net

ここに、

解決方法は %windir%\temp に ASPNET (or NETWORK SERVICE) の Full Control アクセス権をつけてやる。

という記述がある。これを試したところ、動くようになった。
(C:\Windows\tempについて、ローカルのUsersをフルコントロールにした。)


ずーっとmath.asmxが動かなかったが、理由判明。
出だしが、
<%@

ではなく
<@%

となっていた。間抜け。

http://www.microsoft.com/japan/msdn/webservices/general/howwebmeth.aspx
ここから持ってきた物だが、見事に間違っている。

【2010.01.30のボクが注釈】まだ間違ってやがるよ(;´Д`)

メソッドの宣言(2007/03/15)

public にしておかないと、呼び出せないので注意。

DBを扱う

ログインチェックサービスを作ってみるが、
普通にテキストエディタから作ってみたところ、
new でインスタンス化するあたりでエラー(インスタンスはサポートされていない みたいなやつ)
がでる。
VWDで作って、デバッグモードでやったところうまく動いたので、
そのソースをそのままwwwrootに入れてみたが・・・

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

のところで、

ConformsTo という属性は無い、というようなエラーが出る。
.NETのバージョンがいけないのかと思い、IIS管理画面からv2.0に変えてみる。
すると、どのasmxも

サーバー アプリケーションは使用できません。

エラーがでるようになった。.NETのフォルダのパーミッションもいじってみるが効果なし。

ぐぐったところ、以下のページ
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=320001&SiteID=7
から、こんな記述発見。

少し調べてみましたが、405が返ってくる場合や、、「サーバーアプリケーションは使用できません」の場合は、IISの再構成をすると正常に動作するようになったという例がいくつかありました。

aspnet_regiis -i

を、コマンドプロンプトより実行してみて下さい。ただし、.NET Framework の各バージョンによって、専用のaspnet_regiis.exeがありますので注意して下さい。
aspnet_regiisは、%system root%\Microsoft.NET\Framework\versionNumber にあります。
 例
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

これを実行してみたところ、HelloWorldは動作するようになった。

LoginCheckも一応動くようになったが、ユーザーとパスに何を指定しても
「<string>認証に失敗しました。</string>」
となる。
と、いうことはコネクションをOpenするところでSQLExceptionを起こしているということだ。

「認証に失敗しました」のあとに、e.Message(注意メソッドではなくプロパティ)をプラスしてみる。

<string>
認証に失敗しました。ファイル C:\Documents and Settings\ユーザ名\My Documents\aaa.mdf の自動的に名前が付けられたデータベースをアタッチできませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC 共有に配置されています。
</string>

と表示された。
パーミッションの問題とにらみ、ついでにMyDocumentsはイヤだったので、
C:\SQLServerFiles フォルダを作り、そこへaaa.mdf と aaa_log.LDF を移動。
フォルダを、「ASPNET - フルコントロール」とした。
これにあわせ、asmxファイルも修正。
そうしたら見事に動いた。

それにしても、source=(local) で接続できないからってファイル名を指定して
接続するのはちょっとまずいような?

【2010.01.30のボクが注釈】苦労してたなあ、このころは。
最終更新:2011年04月29日 16:39