2015/12/28

Windows Server 2012 R2 でタスクスケジューラを起動

Windows Server 2012 R2 サーバーマネージャー
Windows Server 2012 R2 で、タスクスケジューラがどこにあるか一瞬わからなかったのですが、サーバーマネージャーのツールにありました。

2015/12/21

そろそろ regist という和製英語を止めよう

regist という英単語はありません
REGIST という英語は無い
秋元@サイボウズラボ・プログラマー・ブログ

この記事は昔からあり、私も現場で「regist」を発見する度に(口出しできそうなら)遠回しに使うのを止めるよう促すようにしています。
でも、未だに(日本の)色々なサービスの登録画面で regist.html とか regist.aspx とか regist.php とか、/regist/ とかとか……を見かけます。

2015/12/18

SQL Server 2012 SP3 をダウンロード

SQL Server 2012 SP3
SQL Server 2012 SP3 が登場していました。もちろん SQL Server 2012 のすべてのバージョンが対象です。スケーラビリティとパフォーマンスの向上も図られているようなので、SQL Server 2012 が稼働している場合は入れておきましょう。

Microsoft SQL Server 2012 Service Pack 3 (SP3)
https://www.microsoft.com/en-us/download/details.aspx?id=49996

2015/12/17

ASP.NET で Validator エラーメッセージを取得する

Validator による検証
ASP.NET の CustomValidator コントロールを使用している場合、エラー発生時は ValidationSummary に自動的にエラーメッセージが出力されるのだが、そのエラーメッセージをログに残したいとかで一括で取得したい場合は、こんな書き方ができます。

2015/12/16

無料版 OneDrive の容量を増やす方法(2016年1月末まで)

OneDrive ストレージ 無料プラン 期間限定キャンペーンについて
先日、75TB も動画を保存する馬鹿のせいで容量が 5G へ減った無料版 OneDrive ですが、利用者の声を受けて、15G へのアップグレードキャンペーンを決定しました。申込み期限は 2016 年 1 月末までです。

OneDrive のアップグレード

こちらのサイトで申込みを受け付けています。方法は対象のアカウントでサインインし、「このアプリがあなたの情報にアクセスすることを許可しますか?」に「はい」と答えます。

OneDrive ストレージ 無料プラン 期間限定キャンペーンについて

キャンペーンサイトはこちら。
https://preview.onedrive.com/bonus/


2015/12/14

ローカルの SQL Server Express 2014 に Management Studio から接続

Management Studio から SQL Server 2014 へ接続する
ローカルの SQLServer 2014 Express に Management Studio から Windows 認証で接続する場合のサーバー名(インスタンス)。

(localdb)\mssqllocaldb

2015/12/13

SQL Server における引数の省略(ストアド・テーブル値関数)

SQL Server における引数の省略
SQL Server のストアドプロシージャとテーブル値関数で、オプション引数(省略可能な引数)を設定する方法です。ストアドプロシージャとテーブル値関数では呼び出し方が少しだけ異なるので注意が必要です。

2015/12/10

SHA1 のテストを行ってくれるサイト

SHA1 のテスト
SHA-1 はその脆弱性から使用を中止するよう勧告されていますが、SHA-1 が使用されているかどうかドメインでチェックできるサイトがあります。

SHAAAAAAAAAAAAA
https://shaaaaaaaaaaaaa.com/

Dang. と表示されたら、それは危険ということです。
なんらかの対策を講じるべきですね。

2015/12/09

ファイルの上書きができない(エクスプローラー)

ファイルの上書きができない
Windows でファイルコピーをする際に、ダイアログが何も出ないで強制的に「hoge - コピー.txt」という具合に上書きではなく、コピーされてしまう事があります。

なんらかの理由でエクスプローラーがおかしくなっている可能性が高いので、タスクマネージャーから explorer.exe を一旦終了させて再起動させると直る場合があります。

2015/12/08

C# Gmail のメールを IMAP で受信する

Imapx を Nuget から追加する
C# で Gmail などと IMAP で接続してメールを取得したい場合、送信よりめんどくさいことになるので、ライブラリを使用すると便利です。
そんなわけで、Imapx を使ってみました。

2015/12/06

ExpressWeb がサービス終了で延長もなし!

データジャパンの Express Web がサービス終了
データ・ジャパン株式会社が提供していた ExpressWeb がサービス終了となりましたが、利用者に対しても今後の延長はせず、契約期間終了後はアプリケーションが自動的に削除されるようです。私はあと半年ほど期間が残っていますが、一応は半年前ほどをめどに利用者にメールを送っているようです。

後継としては同社のクラウドサービスを推薦していますが、これは月額 6,000 円となり、月額 280 円でやっていたサービスとは全く異なるものとなっています。
案内メールを読んでみると、あまり引き止める気もないようで、とりあえずコストかかるし利用者も少ないからスパっと切りたいようですね。

今後、ASP.NET で何か実験したい時には、海外の格安 Windows 系ホスティングサービスや、クラウド系のサービスを利用するしかないようです。

2015/11/30

ビルドで変更内容が反映されない

Visual Studio ビルド
Visual Studio で、ビルド(リビルド)しても修正内容が反映されないことがあります。
ビルドしても反映しない
http://www.remember-the-time.xyz/2010/04/blog-post.html
以前のケースでは Bin 以下を削除すれば直ったのですが、今回は別の方法で正しくビルドされるようになりました。

2015/11/26

リモートデスクトップで Ctrl + C が効かずコピペできない

リモートデスクトップ
リモートデスクトップを使用中に、Ctrl + C でコピーができなくなる不具合がたまに発生します。直し方がわかりました。

2015/11/24

C# 既定のパラメーター値は、コンパイル時の定数である必要があります。

静的メソッドでコンパイルエラー
メソッドの引数を省略できるオプション引数。この引数には、しばしば定数を入れたい時もありますが、static メソッドで定数を指定しようとすると怒られてしまう。
private static string Hoge(Encoding enc = Encoding.UTF8)
{    
    return "ほげ";
}
これではだめですね。

2015/11/20

URL クエリパラメータとページ内リンクの順序に注意

URL クエリパラメータについての注意点
URL クエリパラメータを使う際に、シャープ(#)で始まるページ内リンクも一緒に渡したい場合はその順番に注意しましょう。動的にパラメータを作る際には考慮しなければいけません。

2015/11/19

C# ページ内リンクを正規表現で取得

C# ページ内リンクを正規表現で取得するサンプル
リンクページ等の文字列の中にページ内リンクが含まれていた場合に、正規表現でそれを取得して除去する方法です。

2015/11/12

C# で金額にカンマを付ける

C# で数字をカンマ区切り
金額などの数値に 3 桁ごとにカンマを入れ、好きな形式で表示するサンプル。
これで「9,800 円」という表示も自由自在。

2015/11/11

C# の SmtpClient クラスから Gmail を送信する

C# からメールを送信する
C# の System.Net.Mail クラスにある SmtpClient で Gmail を送信する方法。.NET Framework 4.5 の文字化け対策も実装。

2015/11/08

Facebook ガジェットを Blogger に追加する

Facebook Page Plugins
Facebook ページの「いいね!」を促すためのガジェット(Page Plugin)の追加時の注意です。

2015/11/06

OneDrive の容量無制限が廃止に

マイクロソフト
Microsoft のクラウドストレージサービス OneDrive の容量が変更になります。ググッと容量が減りましたが、その理由がひどいですねw

2015/11/05

TortoiseMerge のダウンロード

download TortoiseMerge
SourceTree のマージツールに WinMerge を設定しようとしたが出てこなかったので、TortoiseMerge をインストールした。

2015/11/04

IIS で SSL テスト用のオレオレ証明書をつくる

SSL Self Signed Certificates

https のテストには欠かせないオレオレ証明書(自己署名入り証明書)を作成する手順。

2015/10/28

【RS コンポーネンツより】というウィルスメールが出回っている

メール
実在する会社名を騙るウィルスメールが出回っているようです。覚えのないメールの添付ファイルは無視するというのが鉄則ですが、このケースは非常に悪質です。

2015/10/22

C# KeyValuePair でドロップダウンリストの値を設定

ASP.NET DropDownList
ドロップダウンリストへの値のセットに DataTable ではなく、KeyValuePair を使用する方法。この方法は、書き方を統一できるメリットがある。

2015/10/14

Chrome にて Hosts の変更を即時反映させる

Google Chrome の拡張機能である HostAdmin App は、hosts ファイルを簡単に編集することができるのだが、Chrome 自体のキャッシュが残っている場合は反映しないことがある。そんな時には、アドレスバーから以下の画面を開いてキャッシュを削除すると反映される場合がある。

chrome://net-internals/#dns
chrome://net-internals/#sockets


2015/10/13

hosts ファイルの権限をコマンドで

Windows 10 にて(おそらくそれ以前の 8.1 などでも)、hosts ファイルを変更したにも関わらず変更が反映されないことがある。
調べてみると権限を付与すれば良いとの回答に行き着くのだが、いろいろやった挙句、自分は以下のコマンドから権限を付与することで反映できた。

cacls %windir%/system32/drivers/etc/hosts /E /G Users:W
※ 管理者権限でコマンドプロンプトを実行する。

任意のユーザーの権限を与えたい場合は以下の様な感じらしい。
cacls %windir%/system32/drivers/etc/hosts /E /G " アカウント名 ":W

IE の過去バージョンでテスト

IETester
久しぶりに IETester を使ったのだが、IE9 タブがクラッシュしまくって使い物にならなくなっていた。

2015/10/09

hosts ファイルを編集 Windows 10 で

hosts file update
Windows 10 の hosts ファイルは以前と同じく C:\Windows\System32\drivers\ect にあるのだが、ここに置いてあるファイルを直接編集しようとすると保存できない。
hosts ファイルを別の場所に移して編集、それから上書き(要管理者権限)することで編集することができる。

2015/10/08

Facebook ブラウザのユーザーエージェントに注意

ユーザーエージェントで端末を判別する際に、かつての携帯電話(フィーチャーフォン)では、DoCoMo や KDDI や SoftBank を頼りにリダイレクトなどをかけていた。が、一部の iPhone で、KDDI が入っているがためにガラケー扱いになってそっちにリダイレクトしてしまっているケースを発見した。

2015/09/16

カケホーダイライトプランへの変更は得…?

従来までのカケホーダイプランに比べて 1,000 円安いカケホーダイライトプラン。ほんとうに安いのかオンラインから変更しようとしてみたが…。

結論:
  1. カケホーダイ & データ S パックの人は今より高くなる。
  2. カケホーダイ & データ M パック以上の人は安くなる。
なにこれw

カケホーダイライトプランへの変更

  1. My docomo へログインする。
  2. サービス一覧
  3. ご契約内容確認・変更
  1. 料金プランを確認
  2. 変更ボタンをクリック
選択したお手続きを行うには、解約金のお支払いが必要なため、お手続きできません。

www

確かに契約時にそういうことになっているのは了承済みなんだろうが、こういう契約縛りがまかり通っていることがおかしすぎる。

カケホーダイプランの解約金

※ 細かいことは docomo に聞いてください。

どうやら ここ をみると、9,000 円のようだ。
12 ヶ月分 -1,000 円なので、解約金を支払っても 3,000 円ほど安くなる…のか?

逆に高くなる

カケホーダイライトプランの説明をよく読んでみると、トラップが仕掛けられていることがわかる。

カケホーダイライトプラン
  1. スマートフォン用のパケットパックの契約が必須。しかも 2G のライトプランは不可。
  2. 2 年間の縛りは相変わらず有効。
1 については、データ S パックという月 2G の最小プランは選べないようで、逆に 1,000 円高くなるとかw

2 も厄介。仮に解約金を支払って 3,000 円ゲット! となった場合でも、契約月を覚えていないとまずいことになる。もし仮に他のプランが登場した場合に解約する時期を間違えると、結局 3,000 円以上の損失を被るケースが発生すると思われる。

携帯料金は安くすべき

総務省は携帯料金の値下げについての検討を始めたそうだ。
料金そのものが安くなることも大切だが、携帯電話といったすでに社会インフラの一つとなっているはずのものに対して、「意味不明な規約と縛りで難解になっている状況」こそ修正されるべき。

2015/09/05

Google Chrome 45 で MacType がおかしい件

MacType を使用している環境で、Chrome 45 でサイトを見ると、文字がところどころ太字になっていることがある。
以下の方法で直るようだ。
  1. アドレスバーに about:flags と入力して、Chrome の機能設定画面に入る。
  2. ラスタースレッドの数(Ctrl + F で検索もできる)を「1」に変更。
  3. Chrome を再起動する。

jQuery で文字を流す


インターネット黎明期に作られた個人のホームページや、その後 携帯電話でもよく使われていたマーキータグ(MARQUEE)。
ブラウザごとに若干の違いがあったり、HTML5 では廃止されるタグであることから、新たに作る場合は jQuery を利用したものがよく使われているようだ。なにより今ではスマートフォンへの対応は必須である。

2015/09/04

jQuery のイベントハンドラ追加

特定の要素がクリックされた場合のイベントハンドラを追加する方法。
// ID = Hoge にクリックイベント追加
$(function () {
    $("#Hoge").click(function () {
        alert('ほげ');
    });
});

chrome のフォーム自動入力で背景色が黄色なのを変更


Google Chrome は、フォームに自動入力すると背景色が変わるのだが、その黄色を別の色に変更する Tips。

2015/09/03

jQuery form の disabled 切り替え

disabled が false だから活性ということなのです。
// txtHoge を 活性化
$('#txtHoge').prop("disabled", false);
// txtHoge を 非活性化
$('#txtHoge').prop("disabled", true);

2015/09/02

jQuery css で取得した値の px を削除する

jQuery の css で、要素の幅(width)や高さ(height)を取得しようとすると、返ってきた値に単位(px)が付いてしまう。このままでは計算に使えないので、perseInt 関数で数値に変換する必要がある。
// px が付いてしまう。
var hogeWidth1 = $("#hoge").css("width");
// px なし。
var hogeWidth2 = parseInt($("#hoge").css("width"));

2015/09/01

jQuery で RadioButton の チェック状態を取得

ASP.NET のラジオボタンのチェック状態を jQuery で取得したい場合、やや書き方を変える必要がある。

2015/08/21

Win 10 横線 3 つのハンバーガーボタンを実装する


アプリなどで流行っている、ハンバーガーボタン(横線が並んでいて、押すとメニューが出てくるやつ)を Windows 10 UWP アプリで実装する方法。

2015/08/14

Visual Studio 2015 文字コードによっては文字化けする


Visual Studio 2015 での文字コード


パンくずが文字化けしたw

Visual Studio 2015 では、Shift_JIS などの Unicode 以前の文字コードで保存してある C#, VB ファイル(.cs とか .vb)があるとコンパイルできなかったり、文字化けが発生したりという厄介な挙動をする場合もあるようです。
まぁ、今さらなんで Unicode じゃないファイルが混ざっているの? というそもそもの話もありますが、昔(Visual Studio 2003とかで)に作られたものだと、そういうことも多々あります。

自分がはまったのは、ASP.NET で、C# や VB のソース部分に日本語を設定してあって、それを画面に表示する処理の箇所で文字化けが発生しました。

2015/08/13

ID Manager から KeePass へ移行


ID Manager から KeePass へ乗り換え。ID Manager は使いやすくて満足なのだが、なにぶん更新が停まっているソフトウェアはそれ自体リスクである。

2015/08/12

Visual Studio 2015 Community を日本語化



Visual Studio 2015 Community をインストールしたら、なぜか言語が英語だったので日本語化。

2015/08/02

Windows 10 の Google 日本語入力



Windows 10 にアップグレードしたところ、規定の IME が MS-IME に戻されてしまったので戻す。いったんアンインストール後、再インストールすると戻るらしいが、規定の IME を変更するキーシーケンスも効かなくなってしまった。
探したところ、以下の場所にあった。

2015/07/30

文字列の先頭と末尾を指定文字列で削除

String.TrimStart メソッドや、String.TrimEnd メソッドは、char[] を引数にとるため、先頭の文字列を除去したい場合は string を引数として渡せるよう拡張メソッドを定義する。

先頭文字を除去する拡張メソッド

public static class Extension
{      
 public static string TrimStart(this string target, string trimString)
 {
  return target.Substring(trimString.Length);
 }
}

末尾の文字を除去する拡張メソッド

public static class Extension
{
 public static string TrimEnd(this string target, string trimString)
 {
  return target.Substring(0, target.Length - trimString.Length);
 }
}

使用方法

string address = "京都府京都市上京区岩栖院町4-15-6 京都府アパート";

// 京都市上京区岩栖院町4-15-6 京都府アパート
string afterValue1 = address.TrimStart("京都府");

// 京都府京都市上京区岩栖院町4-15-6 
string afterValue2 = address.TrimEnd("京都府アパート");

// 京都市上京区岩栖院町4-15-6  
string afterValue3 = address.TrimStart("京都府").TrimEnd("京都府アパート");

文字列を単純に消すだけなら System.Replace で十分だが、今回の例のように必ず先頭のみ削除したい場合はこういう方法を使うべき。

2015/07/22

UPDATE で足し算・引き算


更新時に数値の計算

更新時に更新先の列を使用して計算。
-- UPDATE なので Where も入れてみる。
UPDATE Hoge SET Count = Count - 1 WHERE HogeNo = 10

更新時に日付の計算。

ちなみに、日付もいける。
-- UpdateDate を一日足す。
UPDATE Hoge SET UpdateDate = DATEADD(d, 1, UpdateDate) WHERE HogeNo = 10

2015/07/06

astah* community 7 UML ツール

astah* community 7 の注意点

2015年6月24日にリリースされた astah* community 7 だが、今バージョンより商用利用不可となった。公式サイトによると、今後はこのツールを商用利用したい場合には、以下の方法しかないようだ。

2015/07/02

ページにアクセスする前にアセンブリがコンパイルされているかどうか確認してください


Web サイトプロジェクト

アセンブリ 'App_Web_index.aspx.efxued90' を読み込めませんでした。ページにアクセスする前にアセンブリがコンパイルされているかどうか確認してください。
発行しようとする ASP.NET のプロジェクトが、Web アプリケーション プロジェクト ではなく、Web サイト プロジェクト の場合は、aspx ファイル等もビルド(プリコンパイル)した環境にあるものと同じものが配置されていないとエラーとなる。つまり、すべてのファイルを公開環境にコピーしないと動作しない(Web アプリケーションプロジェクトの場合は、dll のみ差し替え等の柔軟な動作となる)。
Web サイトプロジェクトは今から新規作成することはないだろうが、ずっと改修を続けているサイトではたまに出くわすので注意する。

Web アプリケーション プロジェクトと Web サイト プロジェクト - msdn
https://msdn.microsoft.com/ja-jp/library/dd547590(v=vs.100).aspx

2015/06/25

C# の var におけるメリット・デメリット


C# 3.0 から導入された var。これは積極的に使うべきか、使うべきでないかでしばしば論争が繰り広げられる。

2015/06/22

static クラスの、自身のクラス名を取得する。

通常のクラスであれば、自身のクラス名取得は簡単だ。
this.ToString();
ところが static クラスについては this と打った瞬間にこんな残念なエラーとなってしまう。
割り当て、呼び出し、インクリメント、デクリメント、待機、および新しいオブジェクトの式のみがステートメントとして使用できます
以下のように取得する方法がある。
// クラス名は ConsoleApplication1。
Type me = new System.Diagnostics.StackFrame().GetMethod().DeclaringType;
// ConsoleApplication1.Program
string className2 = me.ToString();

2015/06/04

AsEnumerable() が使えない

DataTable の定義にない

古いソース(.NET Framework 2.0 時代のもの)を改修する場合によくあるのだが、AsEnumerable メソッドは拡張されたメソッドであるため、プロジェクトの参照設定で System.Data.DataSetExtensions アセンブリを追加しなければならない。

アセンブリの追加を行えば、インテリセンスにも表示されるようになる。

DataTableExtensions.AsEnumerable メソッド - msdn
https://msdn.microsoft.com/ja-jp/library/system.data.datatableextensions.asenumerable%28v=vs.110%29.aspx

2015/06/03

MultiLine TextBox の Length は改行込みの長さ

ASP.NET の TextBox を MultiLine に設定すると、以下のような挙動となる。

TextBox1.Text.Length

長さを取ろうとすると、テキストボックス内の改行を含めた長さを返す。
このような入力を行うと、TextBox1.Text.Length の戻り値は 7 となる。改行コードもカウントされているためだ。

TextBox の行数を取得

改行コードは機種によって依存するのだが、以下のような方法で行数を取得できる。
int linage = TextBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Length;
// 改行がなくても 1 のため。
linage--;
Length で取得した文字数から行数を引けば、文字数のみ修得することができる。

2015/06/01

DataTable の特定行を ラムダ式で検索・削除

DataTable の検索と削除

DataTable が未だに残っているシステムは多く、表題の表な細かい要望も作りによってはある。行を抽出するためには Select メソッドがあるが、これは場合によっては遅いので、改修するならラムダ式で検索し、その行を削除する書き方をしたほうが良い。
DataTable dt = new DataTable();
dt.Columns.Add("ProductCd", typeof(string));
DataRow dr1 = dt.NewRow();
dr1["ProductCd"] = "HGE-10";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["ProductCd"] = "HOG-20";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["ProductCd"] = "HGH-20";
dt.Rows.Add(dr3);

DataRow[] dr = dt.AsEnumerable().Where(x => x.Field<string>("ProductCd").EndsWith("10")).ToArray();
// この書き方も可能。
//Array.ForEach(dr, r => dt.Rows.Remove(r));
foreach (DataRow r in dr)
{
 dt.Rows.Remove(r);
}

2015/05/25

TextBox の MaxLength が効かない

ASP.NET の TextBox における MaxLength

TextBox の MaxLength プロパティは、TextMode が MultiLine になっていると動作しないというバグが存在する。しかもこれは .NET Framework 4.5 になっても修正されていない。

JavaScript でゴリゴリ対処する

やや泥臭いが、これに関しては JavaScript で回避するしかない。

テキストボックス
<asp:TextBox ID="TextBox1" runat="server" Rows="5" TextMode="MultiLine" keypress="return CheckLength();" onblur="TrimValue();"></asp:TextBox>
JavaScript
// keypress イベントにセットする関数。
var maxlen = 100;
function CheckLength() {
 var textbox = document.getElementById("<%= TextBox1.ClientID %>").value;
 if (textbox.trim().length >= maxlen) {
  return false;
 } else {
  return true;
 }
}
半角文字であれば、上記の関数で問題はないだろうが、全角文字のチェックはできない。つまり、日本語環境では上記のチェックも役に立たない。これを対応させるのは OS やブラウザの差異によりかなり厳しいようだ。
また、半角であっても貼り付け(ペースト)られると全く意味がないので、貼り付け用のチェックを追加する。
// onblurイベントにセットする関数。
function TrimValue() {
 var textbox = document.getElementById("<%= TextBox1.ClientID %>").value;
 if (textbox.trim().length > maxlen) {
  document.getElementById("<%= TextBox1.ClientID %>").value = textbox.substr(0,maxlen);
  return;
 } else {
  return;
 }
}

jQuery で制御する手もある

jQuery が使えるなら、上記の例を一挙に解決することができる。しかも、変換前の日本語(全角)もカウントする。素晴らしい。
と思ったら、Chrome でしか動かない。だめだこりゃ…。
$(function() {
 var maxlength = 100;
 var tb = $('textarea[id$=TextBox1');
 $(tb).keyup(function() {
  var len = $(this).val().length;
  if (len > maxlength) {
   var s = $(this).val().slice(0, maxlength);
   $(this).val(s);
  }
 });
});
小手先だが、このような JavaScript で対応するしかないのだが、肝心なことは サーバー側でのチェックを必ず入れること である。

2015/05/22

正規表現で URL を抽出

C# の正規表現で、URL から値を抽出したい場合の例。
// 例えば、以下のページからアクセスしてきた場合の、hoge1 を修得する。
// http://exsample.com/category/hoge1/index.aspx
Regex regex = new Regex("/category/(?<dir>.*?)/", RegexOptions.IgnoreCase | RegexOptions.Singleline);
Match m = regex.Match(Request.UrlReferrer.OriginalString);
// テスト用
//Match m = regex.Match("http://exsample.com/category/hoge1/index.aspx");
if (m.Success)
{
    string dir = m.Groups["dir"].Value;
}

2015/05/19

マネージパイプラインモードの統合について(Managed Pipeline Mode)

ASP.NET 設定が、統合されたマネージ パイプライン モードで適用されないことが検出されました。

ASP.NET 2.0 の互換性について

ASP.NET 2.0 時台に作成したアプリケーションを、マネージパイプラインモードが「統合」に設定されたアプリケーションプールにアタッチするとアプリケーションが開始できない。
マネージパイプラインモードを「クラシック」に設定するか(推奨されない)、Web.config の設定を変更する必要がある。今回のケースでは、以下の要素を追加したところ動作するようになった。
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
以下に細かいガイドラインがある。

IIS 7 での ASP.NET 2.0 の互換性に影響する変更点
https://technet.microsoft.com/ja-jp/library/ff454090.aspx

Ajax.NET の互換性

validateIntegratedModeConfiguration="false" を Web.config に追記することで統合モードでの動作は確認できた。しかし、この状態では AJAX.NET が動作しない。[Ajax.AjaxMethod] 属性を付与したクラスを動作させるためには、さらに Web.config に追記する必要がある。
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated" />
      <add verb="POST,GET" name="Ajax" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </handlers>
  </system.webServer>

2015/05/15

ASP.NET の customerrors

ASP.NET において、web.config の customerrors 設定をよく忘れるのでメモ。
業務用途だと独自のエラー画面に飛ばすことが多いが、これだと画面からはエラー内容がわかりづらいケースが多いので(ログを探すのも面倒…)、パッと確認したい時のメモ。

エラーを画面に出したい

<customErrors mode="Off" />

独自のエラー画面を出したい

defaultRedirect に URL を指定する。URL が間違えていると、IIS の 404 エラーが発生するので注意する。
<customErrors mode="On" defaultRedirect="error.html" />

リモートクライアントのみエラー画面を出したい

この設定を行うためにはクライアントの設定もしてあるはずなので、通常はあまり使わないかもしれない。
<customErrors mode="RemoteOnly" />
いずれの場合も特に注意すべきは mode の値。それぞれ Off, On, RemoteOnly であり、OFF や off は許容されないので気をつける。

2015/05/10

Google 日本語入力に顔文字(Kaomoji)を追加

Google 日本語入力は標準では顔文字辞書がないので、MS-IME 用の顔文字辞書を追加する。なお、以下の取り込み方法で、自分で作成した辞書についても同様に取り込むことができる。

顔文字辞書のダウンロード

いずれの顔文字でもよいが、テキスト形式(.txt)であること。

新規辞書の登録

  1. Google 日本語入力のオプション画面を開く。Windows 8.1 系であれば、コントロールパネル → 言語 → 言語のオプション から。
  2. 管理 → 新規辞書にインポート
  3. 取り込みたい辞書を選択し、辞書名を入力したあと、インポートボタンを押下する。なお、辞書名はすでに登録されている辞書と同じ名前にできないので、別名にしなければならない。
  4. ファイルの内容が正しければ、Google 日本語入力に指定されたファイルの単語が登録される。
なお、ATOK 用の辞書も同様の方法で取り込むことができる。
Related Posts Plugin for WordPress, Blogger...