IIS のアプリケーションプールをコマンドでリサイクル


IIS のアプリケーションプールは定期的にリサイクルされるが、バッチファイル(.bat)を作っておけばコマンドでリサイクルさせることも可能。

rem @echo off
rem アプリケーションプールリサイクル
appcmd recycle apppool /apppool.name:"DefaultAppPool"
pause

上記の例では DefaultAppPool のリサイクルを行っている。
ただし、このコマンドは管理者権限で実行する必要がある。


アクセス許可がないため構成ファイルを読み取ることができません。

秀丸で選択する時にスクロールを固定したい

秀丸エディタ
秀丸エディタの初期設定では、スクロール時にもカーソルが移動してしまうため、画面がスクロールするような複数行が選択できません。
設定を変更します。

Git コミットの取り消し

Git において、間違えてコミットした場合に戻したい場合に git revert コマンドと、git reset コマンドがあるのだが、revert は履歴を残しつつ戻すのに対し、reset は「なかったもの」として戻すので、理解したうえで行わないと問題が発生する可能性がある(特に共用リポジトリに対しては注意が必要)。

コミットを取り消したい(変更点は残す)

$ git reset --soft HEAD^

コミット取り消し(変更点もすべて戻す)

$ git reset --hard HEAD^

プッシュした履歴を戻す。

$ git push -f origin HEAD^:master

マイナスとプラスを変換する SQL

数値のプラス・マイナスを反転

数値を扱う際、その数値をマイナスにしたり、プラスに変換したい場合は、以下のような方法がある。
UPDATE
 Hoge
SET
 Point = Point * -1

数値を常にマイナスに

プラスとマイナスを反転したいならこれで良いのだが、常にマイナスにしたい場合は、UPDATE 文に対して CASE を使い、処理を分岐させなければならない。
UPDATE
 Hoge
SET
 Point = CASE WHEN Point > 0 THEN Point * -1 ELSE Point END

数値を常にプラスに

逆に、常にプラス(絶対値)にしたいんだよ、という場合は...
UPDATE
 Hoge
SET
 Point = ABS(Point)
ABS 関数は、数値によってはオーバーフローが発生してしまうので注意。
ABS (Transact-SQL) - MSDN - Microsoft

ちなみに、ABS ってなんだろうと思って調べたのだが、absolute value の略であるようだ。

一意のキー属性 ’fileExtension’が ’’ に設定されている...

MIME の種類
---------------------------
この操作の実行中にエラーが発生しました。
エラー: 一意のキー属性 'fileExtension' が '.woff'に設定されている種類 'mimeMap' の重複コレクション エントリを追加できません
アプリケーションの静的コンテンツが有効化されなくて調査していたところ、意外な箇所にエラーがあった。
上記は、IIS の MIME の種類を開こうとして出るエラー。IIS 上に配置したアプリケーションの web.config の記述にエラーがある。

例えば上記の例だと、
<staticContent>
 <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
</staticContent>
このような定義があるのでそれを消す。

IIS は、アプリケーションごとに持っている web.config と密接につながっており、エラーが出た際には原因の特定が難しかったりする。

ASP.NET のデバッグが止まらない (ローカル IIS)

ローカルの IIS にマップされている ASP.NET アプリケーションの構成(アプリケーションルートやプール等)を変更する場合、そのプロジェクトが保持しているサーバーも変更しないとブレークポイントで止まらずデバッグできない。
プロジェクトのプロパティ
  1. プロジェクトを右クリックしてプロパティを表示。
  2. Web タブを開く。
  3. サーバーの プロジェクトの URL が IIS で設定されているものであるか確認する。
  4. デバッガーの ASP.NET にチェックが入っているかも確認する。
IIS と Visual Studio で、それぞれ設定されている URL が異なっているとだめらしい。よくよく考えると当然なのだが、何のメッセージも表示されなくてデバッグできないので原因がよくわらかない場合がある。
IIS Express では自動的に変更されるので関係ないはず。もしデバッグできない場合は他の原因である可能性が高い。

一意のキー属性 ’value’ が ’index.aspx’に設定されている種類 ’add’ の重複コレクション エントリを追加できません。

IIS で設定された Web サイトにおいて、Web.config の記述が不正で、既定のドキュメント設定が読み取れなかった場合にこのエラーとなる。
例えば以下の様な記述が Web.config にあった場合、以下の記述をいったん削除してみると、IIS が正しく設定を行ってくれて正しく動作するようになる。
<defaultDocument>
 <files>
  <add value="index.aspx" />
 </files>
</defaultDocument>
IIS 設定は Web.config と連動していて、手動で修正するとおかしくなることがあるので注意が必要。

ISAPI および CGI の制限 メニューがない

Web サーバー上の ISAPI および CGI 制限一覧の設定により、要求しているページを使用できません。

ASP.NET アプリケーションの設定中にこのようなエラーが出たのだが、IIS のアプリケーションの設定画面を見てもそのような設定項目はない。


この設定はマシン全体の機能ビューにある。


ISAPI および CGI の制限

制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。

主に古い .NET アプリケーションにおいて、突然この意味不明なエラーが出る場合がある。このエラーは、TableAdapter と xsd (データセット)を使用しているアプリケーションで、参照先のデータベース定義を変更した際に出る(古いというのは、よもやこの構成で新規開発をしているところはないと思うため)。
xsd とは、データベース構造の定義ファイルのようなもので、Visual Studio 2003 や 2005 の時代の初心者向けの解説書などによく出てきた(GUI から、ノーコーディングでデータベースアクセスが可能)。

この定義というのが曲者で、アクセス時にはデータベース構造と完全に一致している必要がある。そのため、テーブル変更等を行った場合は、この定義ファイルも再構築しないと突然 落ちてしまう。
最近の Entity Framework だと、クリック一発で更新可能だが、xsd データセットの場合は、削除 → 新規作成 をしないとうまく動かなくなる(たぶん)。
  1. xsd ファイルをデザイナー表示する。
  2. エラーとなっている定義の構成を開く(デザイナーは表示方法を変更するだけでソース管理等で差分になってしまうので注意)。
  3. SQL をコピーしておく。
  4. エラーとなっている定義を削除する。
  5. 定義の再作成。先ほどの SQL を貼り付ける。

xsd データセットは業務ではあまり使われていないかもしれないが、ちょっとしたツールなどだと使っているケースもあるので、テーブルの構造を変えた場合は注意が必要。

Repeater のコントロール値を取得・設定

Repeater コントロールに配置したコントロールの値をいじりたい場合は、一手間かける必要がある。
画面
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
 <ltItemTemplate>
  <asp:CheckBox ID="CheckBox1" runat="server" />
  <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
 </ItemTemplate>
<asp:Repeater>
コード
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    if (e.Item.FindControl("Label1") != null)
    {
      Label lbl = e.Item.FindControl("Label1") as Label;
      lbl.Text = "てすと";
    }
    if (e.Item.FindControl("CheckBox1") != null)
    {
      CheckBox chk = e.Item.FindControl("CheckBox1") as CheckBox;
      chk.Checked = true;
    }
  }
}
  • FindControl は万が一コントローラーが見つからなかった場合は NULL になってしまうため、その状態でプロパティにアクセスすると落ちるので注意する。
  • as Label などは (Label) としてキャストしても良い。

ALTER で 日本語列名

SQL Server の ALTER にて、日本語の列名を使用したい場合、日本語は角カッコでくくる。
-- メッセージ 102、レベル 15、状態 1、行 1
-- 'ほげ' 付近に不適切な構文があります。
ALTER TABLE Hoge ADD 'ほげ' NUMERIC (10,0) NOT NULL DEFAULT 0;

-- 日本語(2バイト文字)は、角カッコでくくらないとエラーになる。
ALTER TABLE Hoge ADD [ほげ] NUMERIC (10,0) NOT NULL DEFAULT 0;
上記の例では、NULL 不許可の属性も付与している。

アプリケーションがプリコンパイルされているため、ディレクトリ ’’は許可されません。


Web サイトの発行時にプリコンパイルする設定の場合は、App_Code フォルダがルート直下に存在しているとエラーとなる。