開発
ASP.NETのセッション管理をAppFabric Cachingで!
AppFabricのインストール(ポイントだけ)
Windows Server AppFabricのダウンロードはこちらから。
4つほどありますが、Server2008R2やWindows7の64bit版であれば、
| WindowsServerAppFabricSetup_x64_6.1.exe |
をダウンロードしてインストール。きっちりCachingサービスと管理ツールを選択するのを忘れずに。
あとドメインに参加していないと、設定はSQLServerに保存できず、共有フォルダを作ってXML管理になります。
なお、AppFabric Cachingの管理ツールは以下から、
スタートメニュー > Windows Server AppFabric > Windows PowerShell のキャッシュ管理
右クリックして管理者として実行しないとダメです。通常権限でも起動しますが、ことごとくコマンドが失敗します。
とりあえずCaching管理ツールから以下のコマンドでAppFabric Cachingを動くようにしておきます。
PS C:\Windows\System32> Use-CacheCluster
PS C:\Windows\System32> Start-CacheCluster
アプリケーションのインストール
今回は勉強がてらEdtterを利用しました。ダウンロードはこちら。
ASPNETDBとEDTTERのmdfがついているので、適宜SQLServerにアタッチして、
Web.configのApplicationServices(ユーザー管理)とEdtterEntities(Edtterの投稿管理)のConnectionStringを書き換えましょう。
あとはIIS7で適当に設定すれば動くようになります。
AppFabric Cachingの設定
セッション管理のためのキャッシュの作成と、セキュリティ関連の設定の変更をします。
まず、キャッシュを作成します。今回はsessionという名前でキャッシュを作成します。これは後述するweb.configの設定と合わせる必要があります。
PS C:\Windows\System32> New-Cache session
そしていったんCacheClusterを停止しましょう。
PS C:\Windows\System32> Stop-CacheCluster
次に、セキュリティ関連の設定をします。Webサーバーと同じサーバーで実行するのであれば、
PS C:\Windows\System32> Grant-CacheAllowedClientAccount
Account: IIS APPPOOL\ASP.NET v4.0
みたいな感じで、アプリケーションプール名を指定します(\の右の部分)。
動作するアプリケーションがNETWORK SERVICE権限で動くのであれば、NETWORK SERVICEを指定しておきます。
が、別サーバーで動かす場合のやり方がわからんので、今回はセキュリティ関連の設定を全部Offにします。(せめてID/PWD認証があれば楽なんですがそれすら無いので)
PS C:\Windows\System32> Set-CacheClusterSecurity
SecurityMode: None
ProtectionLevel: None
以上でAppFabric Cachingの(最低限の)設定は完了です。細かい設定をするともっと大変なのですが、英語のドキュメントも翻訳済みドキュメントも、
ベストプラクティス的なのがどうにも見当たらないので今回はそのままで。
最後にCacheClusterを再開しておきましょう。
PS C:\Windows\System32> Start-CacheCluster
アプリケーションの設定
EdtterのWeb.configを開き、<Configuration>要素の直下に以下の設定を追加します。
<configSections>
<section name="dataCacheClient"
type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
allowLocation="true"
allowDefinition="Everywhere"/>
</configSections>
<!-- dataCacheClient要素を追記 -->
<!-- キャッシュの設定などはここに記述する -->
<dataCacheClient>
<localCache isEnabled="true" />
<hosts>
<host name="localhost" cachePort="22233" />
</hosts>
<securityProperties mode="None" protectionLevel="None" />
</dataCacheClient>
そして<system.web>要素の直下に以下の設定を追加します。
<sessionState mode="Custom" customProvider="Velocity">
<providers>
<add name="Velocity" type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" cacheName="session" />
</providers>
</sessionState>
最後に、Edtterのソリューションの参照設定に以下のDLLを追加します。
C:\Windows\assembly\GAC_MSIL\Microsoft.ApplicationServer.Caching.Client\1.0.0.0__31bf3856ad364e35\Microsoft.ApplicationServer.Caching.Client.dll
追加したら、参照のプロパティでローカルコピーをTrueにしておきましょう。そうすることで、Microsoft.ApplicationServer.Caching.Client.dllがアプリケーションへの発行時にコピーしてくれます。
(これが正しいやり方なのかどうかわかりません。手動でbinフォルダ内にコピーしてもいいです)
動作確認
ここまで出来たら、VS2010からアプリケーションを発行します。まぁWeb配置ツールはそこまで難しくないので、そのあたりはなんとなくやりましょう。
でもローカルIISへの発行は管理者権限でVS2010を起動していないと許してくれないので注意(めんどくせぇ)
アプリケーションを無事発行、つまりIISにアプリケーションとして配置できたら、Edtterを開いてください。
ここで長時間待たされる場合は、AppFabric Cachingが立ち上がってないとか、導通していないとか、アクセス権がないとか、そこらへんで詰まっている可能性が高いです。
そのあたりで問題が起きなければ、通常通りEdtterの画面がブラウザに表示されるはずです。
試しに、何かセッションを利用するコードを書いて、AppFabric Cachngが使われているかどうか確認してみましょう。
なんでもかまわないので、Controllers\HomeController.csのIndexメソッドに以下を追加してみます。
{
// 書き込み
Session["now"] = DateTime.Now;
ViewData["TotalPages"] = _er.TotaltPages();
ViewData["CurrentPage"] = id;
var entries = _er.GetList(id);
// 呼び出し
var now = Session["now"];
if (Request != null && Request.IsAjaxRequest())
return PartialView("EntryList2", entries);
else
return View(entries);
}
確認用に、Views\Home\Index.aspxの好きなところに、
<%: ViewData["now"] %>
とでも書いておきましょう。
以上で再度ビルドして発行できたら、再度Edtterの画面を開いてみましょう。
わかりやすいよう、VisualStudioでブレークポイントを設定してみます。
これだけだとホントにAppFabric Cachingを使っているかどうかわからないので、
Caching管理ツールで以下のコマンドを実行してみましょう。
PS C:\Windows\system32> Get-CacheStatistics session
Size : 508
ItemCount : 2
RegionCount : 2
RequestCount : 24
MissCount : 2
こんな具合で、きっちりAppFabric Cachingが利用できていることが確認できました。
リロードするたびに、カウントが増えていくのが確認できるかと思います。
とらのあな実店舗でのポイント値引き計算について
いつ頃からかわかりませんが、最近はとらのあな実店舗でも、ポイントによる値引きが利用できるようになりました。
こちらのページによると、ポイントは20円ごと1ポイント(つまり5%で切り捨て)が貯まるようです。
また、消費税は対象外となるため、本体価格(税抜き金額)からの計算になります。つまり税抜き1000円、税込み1050円の商品の場合は50ポイント。
# というか店舗でのポイント利用の案内早く書いた方が良いと思いますよ、とらのあなさん。
じゃあポイントを利用した場合はどなるのか、ざっくり計算してみました。
とりあえずレジのバイトのおねーちゃんに言われるがまま、100ポイント100円らしいので100円分値引きしてもらっています。
ちなみにレシートに記載された発生ポイントは77ポイント。
本体価格の合計は1653円となりますが、1653 * 0.05は82.65になるはずなので、少なくとも値引き前の金額でポイント計算されているということはありません。
おそらく、本体価格合計からポイント値引き分を引いて、その金額の5%を発生ポイントとして計算しているかと思われます。
…が、このやり方だと『ポイントが発生しない商品を含んだ会計でポイント値引きをした場合』に対応できないため、内部的にはポイント値引きを各商品に按分して計算している可能性もあります。
(上のキャプチャでいう右の方のポイント値引き額の欄参照。でも今のところそういうことはやってないようですが)
え、なんでそんなめんどくさいことするの? と一瞬思われるかもしれませんが、商品毎にポイントついたりつかなかったり、ポイント率が違ったりすると、ポイント値引きも商品毎にやらないといけません。
早い話が、ポイント率が高い商品からポイント値引きしたことにすると、ポイント率が低い商品からポイント値引きしたことにした場合より、発生ポイントが少なくなってしまうわけです。
というか『どの商品から値引きするか自動的に決める』なんてのはシステム的には死ぬほどめんどくさそうなので私なら絶対にやりたくありません。
これがさらにオンラインでの決済だったりするとさらに面倒で、いざ出荷するときに値段変わってたりしたらどうするの? なんていう問題もあります。
ショップ都合での金額変更であれば、あくまで注文時のこととして割り切れなくもないですが、こと書籍に至っては本体価格がわりとあやふやだったりします。
# 基本、出版社というのは価格にしても発売日にしてもかなり不安定で、早い話が残念な連中です。
このあたりについては、Amazonがかなりしっかりした仕組みを持って運用しているようです。Amazonポイントについてのヘルプなどはかなり参考になるでしょう。
まぁそのAmazonも、最近はポイントがつく商品はかなり少なく、色々みてまわったものの、以下のページぐらいでしかポイントがつく商品が見当たりませんでした。
→Amazon.co.jp:「みんなが選ぶ本 10%ポイント還元」キャンペーン(AA)
予約商品で値段が変わった場合は、支払い価格に応じたポイントが付与されるようなので、
システム的には、注文データに購入時のポイント率を持っておいて、実際の請求金額で付与ポイント数を再計算する感じでしょうか。ああめんどくさい。
とまぁこんな感じで、ポイント計算などいうのものは地味でありながらも、かくもめんどくさいのよ、というお話でした。
ちなみに上のExcelの表、価格やポイント発生率、ポイント値引きの数値を変更すれば、発生ポイントも自動的に計算されるよう、式を織り交ぜて構成させていますが、
一点、致命的な考慮漏れが存在します。それはなにか。支払金額を全額ポイントで支払いした場合です。
税抜き価格の合計が1653円なのに、税込み価格合計の1735円を1735ポイント使って値引きしました。
発生ポイントの計算用に、ポイント値引き分を税抜き価格合計から引いて計算します。
( 1653 -1735 ) * 0.05 = -4.1
おおっと、マイナスになっちゃいました。
まぁそもそも、100ポイント100円とかバイトのおねーちゃんは言っていたので、もしかしたら100ポイント単位でしか使えなかったり、
ポイント利用も実は税込み金額に対する値引きではなく、税抜き金額に対する値引きであるなら大丈夫なのですが、
請求される金額は1050円なのに、ポイントで全額支払おうとしたら1000ポイントで済んだ、とか客的にはイミフかと思うので、そのセンは薄いかなとは思います。
まぁ、システム的には、利用ポイント数が税抜き金額合計を上回った時点で、発生ポイント全部ゼロにすれば済む話ではありますが。ああめんどくさい。
evolus pencilが凄い
画面設計をしていて、evolus pencilのあまりの素晴らしさに感銘を受けたので、勢いでエントリを書いてます。
pencilはいわゆる HTMLモック を作成できるソフトウェア。モックに限らず、汎用的なGUIプロトタイピングも可能です。
(というかもとよりそっちがメインコンセプト)
ダウンロードはこちらから。本家サイトはどうもつながりません。Donateしようとしたらサイトが落ちていて全然、という。
なお、Pencil-1.2.0.win32.installer.exeというのがWindows用のスタンドアローンで動くアプリケーション本体のインストーラになります。
元々はFirefoxのプラグインだったようですが、いつからかスタンドアローンで動くバージョン(でもおそらくFx関連のコンポーネントで動いてる)が出ており、
さらに最近はSketch系のステンシルも追加されて、かなり本格的なアプリケーションになってきました。
なお、 ファイル名の右に緑色の文字でTemplateと書かれたファイルは、エクスポート形式の追加プラグイン、Stencilと書かれたファイルは追加の図形になります。
Export TemplateじゃないTemplateはいまいち使い方がわかりませんが…
とりあえず、インストーラとSimple HTML Export Templateをダウンロードしておきます。
Pencil-1.2.0.win32.installer.exeを叩いて、普通にインストールしましょう。
起動後の画面です。使い方はなんてことはない、左ペインに表示されたステンシル(図形)を右側の図面にドラッグ&ドロップしていくだけです。
…が。
いつのバージョンからか、Sketch GUIという、スケッチ風のステンシルが標準で同梱されているようになりました。
このステンシル、Microsoft Expression Blend 3 Sketch Flowのような、ラフ書き風のシェイプ(ステンシル)になります。
ラフ書きの何がいいかというと、画面設計を顧客に説明する際に、あくまでこれは画面設計である、という点をわかってもらいやすいという利点があります。
画面設計はあくまでラフ、プロトタイプなので、デザインについては後から詰めるものなので、画面設計について打ち合わせをする場合にデザインの話はしてはいけません。
(なのであまり緻密すぎる画面設計書をこの時点で客に見せるべきではない)
というところでSketch風プロトタイピングの出番というわけです。
pencilのこのSketchy GUIステンシルですが、プロトタイピングには十分なシェイプを備えています。
汎用Box(Border付きのDivのようなもの)、ライン(角度、長さ調整可能)、テキストボックス、パスワードフォーム、ラベル(ただの文字列)、ハイパーリンク文字列、
パンくずメニュー、ボタン、チェックボックス、ラジオボタン、コンボボックス、リストメニュー、スライダー、テーブルなどなど。
これだけあれば、まずプロトタイピングには困らないでしょう。Excelのような使い方をしたい向きには、
Annotationステンシルに吹き出しや文字入り丸形図形なども入っているため、注釈なども簡単につけられます。
では、ちょっとした画面設計をしてみましょう。Sketchy GUIから適当にシェイプをDnDして配置していきます。
こんな具合に、VisualStudioのフォームデザイナのように他の配置済みステンシルの座標に吸着する機能もあります。
VisualStudioほど洗練はされていませんが、 かなり嬉しい機能のひとつです。
テーブルなども簡単。配置した テーブルのシェイプをダブルクリックすると、エディットモードになります。
Shift + Enterで次の行の入力が出来ます。セルの区切りは|(パイプ)で、[]でチェックボックス(中に*を書くとチェック済み)、()でラジオボタンが描けます。
行が増えた場合や、たまにズレがおきる場合などが、ありますが、まぁなんとかなるレベルです。
もちろん、Microsoft Officeによくある「シェイプのグループ化」「背面に移動」なども右クリックメニューから可能。
シェイプをまとめて選択して、ツールバーのボタンから左揃え、上端揃え、等間隔化なども可能(凄い!)
もちろんシェイプのプロパティから色やフォントサイズの変更なども当然出来ます。
では、単純なCRUDアプリケーションとして、新規登録画面も作ってみましょう。
右上の +New Page…ボタンから新しいページを作成できます。当然、ページに名前をつけることも、さらにはコメントをつけることも出来ます。
こんな感じの画面にしました。スタンダードな感じです。
さて、当然検索画面から新規登録画面が表示され、登録画面から検索画面に戻るのが普通な流れです。
(ポップアップする場合もありましょうが)
というわけで画面遷移を定義します。新規登録ボタンを右クリックし、Link To > で遷移させたいページを選択します。
同様に、新規登録画面の登録ボタンにも、検索画面へのリンクを定義しておきましょう。
ここまでやったら、画面設計をエクスポートしてみましょう。
メニューのTools > Manage Export Templateから、先ほどのダウンロードページにあったHTML Templateを登録します。
Install New Templateボタンでファイル参照して、ダウンロードしてきたZIPをそのまま指定するだけ。簡単です。
そして、メニューのDocument > Export Documentをクリックします。
いろいろ形式はありますが、Single web pageを選んでNextボタンを押してください。
(いろいろ試しましたがODTとPDF、DOCはうまくいきませんでした。ODTは一応ファイルは開けるのですが…)
あとは適当にNext、Nextして、ファイルの出力場所を選んでFinishするだけです。
こんな感じでファイルが出力されます。
では、index.htmlを開いてみましょう。
こんな感じで(わかりづらいですが…)、新規登録ボタンのところがClickableになっており、
クリックすると新規登録画面のところまでページ内遷移するようなHTMLができあがります。
流石にpencilで編集したモックアップからベクターデータを作ってくれるまではしてくれませんが…
(あとテーブルのチェックボックスとラジオボタンはExportするとズレる)
とまぁ、こんな感じでpencilは画面設計については最強レベルに良くできたツールかと思います。
ぶっちゃけ、使いやすさだけでいうならExpression Blend Sketch Flowなんかより全然使いやすいです。
まぁ、テーブルがズレたり、たまに落ちたりするなど、若干難があったりしますが…
というわけでWebアプリの設計をする際はpencilちょーつかいやすいよ、というお話でした。
つか、Donateしようにもhttp://pencil.evolus.vn/Donation.aspxマジ繋がらなくてどうしようもないんだけど…
モバイルシステム開発勘所
以下の記事を見てちょっと思うところがあったので書いてみる。
クライアント技術の動向とコーナーへのフィードバック - @IT
http://www.atmarkit.co.jp/fdotnet/chushin/chushinsurvey_02/chushinsurvey_02_01.html
思うところがあった、というのも、ASP.NET MVCを身につけたいスキルとしている回答がとてつもなく少ないことに軽くショックを受けました。というかASP.NETを身につけたいスキルとして選ぶ人がちょっと信じられないくらい多い。
まぁそもそも、アンケートの回答母体自体、C/S中心な人が多そうなのでこんなもんなのかもしれません。
閑話休題。
さて、先日ついに正式に、ASP.NETによるモバイル開発に死刑宣告がされました。
モバイル開発、今後はASP.NET MVCでなんとかしてね、あとjQueryの方がASP.NET Ajax Libraryより良いのでASP.NET Ajax Libraryはフェードアウトするよ、みたいな内容です。さもありなん。(でも記事のアドレスは失念しました。誰か教えて)
まぁ死刑宣告も何も、ASP.NETモバイルコントロールは百害あって一利なし、真面目にやろうとするとデスマ必死、VS2008からは標準でサポートすらされなくなり、Connectで「お前サポートする気ないならUA判定で間違ったヘッダ返すとか余計なことすんなよ誤爆してんだよ使えねーな」と問い合わせると「Web.configでなんとかしてね、ちなみに今後サポートする予定も無いよ」みたいな返事が返ってきてたので、今更と言えば今更なお話。
そして今日に至っても、日本国内のガラパゴス携帯(?)がスマートフォンに駆逐されるわけもなく、各キャリア独自仕様でWeb開発者を悩ませ続けています。
というわけで、2010年4月現在、モバイルWebサイト開発で最低限考慮しなくてはいけない部分を覚え書きがてらメモしてみました。多少間違いや既に改善してる箇所があるかもしれません。
HTMLについて
表現力を考慮すると、XHTML 1.0 Transitionalを利用するのが無難。文字コードはShift-JISにすること。
各種制限
DoCoMoは新しい機種以外Cookieが使えないので、原則Cookieは利用しない。
→つまりセッションはURLの引数やフォームのHiddenにセッション管理トークンを埋め込んで管理する。
Javascriptは原則利用できないと考えてよい。CSSは別ファイルにせず、インラインで記述する必要がある。
画像
端末により、表示できる画像サイズ、容量が異なる。真面目にやるなら、機種の画面解像度データを持って、機種ごとに画像サイズを自動調整したい所。(有料でデータを売っている会社がある)
自動画像調整という点では、Keitai Pictureなどのサービスがあるが、このテのサービスはどこもかなり高額。
なお、画像フォーマットは普通のjpgやgifを利用可能。プログレッシブJPEGやCMYK JPEG、pngは利用しないこと。
絵文字
以下のように記述する。絵文字コードは各社で統一されているわけではないので、対応表を内部で持って、各キャリア向けに変換する必要がある。
なぜなら、DoCoMoの絵文字はAUのEZwebで表示しようとすると自動的に変換してくれるが、Softbankは何もしてくれないキチガイ仕様となっているため。
以下に変換例(記述例)を示す。(他のやり方もある)
DoCoMo
<code src=””>
AU
<img alt=”" localsrc=”44″ />
Softbank

なお、絵文字相互変換マッピングはPHP関連でおなじみのアシアル株式会社のブログにて、 JSONによる変換データが公開されいるので参考にするとよい。
フォーム
各社携帯電話のブラウザのテキストボックスに設定する入力制限あるいは既定入力モード。
例えば電話番号を入力する場合は、入力する際に入力モードが半角数字になっている、など。
全角
既定値なので各キャリア何もしない。
半角かな
textboxのstyle=”"に以下の値を入れる。
DoCoMo
-wap-input-format:"*<ja:hk>"
AU
-wap-input-format:*M;
Softbank
-wap-input-format:"*<ja:hk>"
半角英数(よく使います)
DoCoMo
textboxのstyle=”"に以下の値を入れる。
-wap-input-format:"*<ja:en>"
AU
textboxのstyle=”"に以下の値を入れる。
-wap-input-format:*m;
Softbank
textboxに以下の属性を記述する。
mode=”alphabet”
wap-input-formatを指定すると、入力初期値ではなく入力制限値になってしまうので、style=”"の値は設定できないというキチガイ仕様。
日本語が不自由な連中に丸投げして作らせたとしか思えないキチガイっぷり。
半角数値(よく使います)
textboxのstyle=”"に以下の値を入れる。
DoCoMo
-wap-input-format:"*<ja:n>"
AU
-wap-input-format:*N;
Softbank
-wap-input-format:"*<ja:n>"
端末識別
Cookieが使い物にならないため、ログインIDの記憶などは、DB上に端末識別用のIDを利用するのが無難。
また、キャリアによって識別子がSSLで送信されたりされなかったりするため、非SSL領域でのみ利用すること。(確かAUだけSSLでも送信された気がする)
他にも取得できる識別子もあるが、ものによっては機種変更でリサイクルされる?など不穏な情報もあり。
勝手サイト(笑)で利用するにはHTTPヘッダから取得できる以下の識別子を使うのが無難。
当然、簡単に偽装できるため、このIDのみでログイン状態にするなどの運用は厳禁。あくまで仮ログイン的な使い方や、個人情報を含まない(割とどうでもいい)認証にのみ使うこと。
DoCoMo(iモードID)
HTTPヘッダ上のx_dcmguidを利用する。大文字小文字違いで別端末が存在するため、照合順序などでは大文字小文字を区別する必要があるというキチガイ仕様なので注意。
また、URLの引数にguid=ONというクエリストリングが含まれていないと送信されないというキチガイ仕様なので注意。
AU(EZ番号)
HTTPヘッダ上のx_up_subnoを利用する。
SoftBank
HTTPヘッダ上のx_jphone_uidを利用する。
※ヘッダのキーについては、大文字小文字、-と_にイマイチ自信がないので良い感じに正規表現で抽出してください。
はい、というわけでモバイルサイト開発の最低限の勘所でした。キチガイ仕様満載ですが、これが最低限のレベルです。ユーザビリティに凝り出すともっとめんどくさいところが大量に出てきます。
HTMLメインの勘所なので省略していますが、これ以外にもRFCをガン無視したメールアドレスや、連続送信でブロックされるSMTPなど、とにかく面倒なことが山積みです。
.Netでこれからモバイル開発を初めてやる!という人は、これらのキチガイ仕様群を眺めて頭が痛くなってきても仕方がありません。
特にDoCoMoとSoftbankには軽く殺意が沸いてきてもそれは仕方のないことかと思います。
…で、これをどうやってASP.NET MVCでやるかと考えるともうね…
FastCGI for IIS7.0のアップデート
件のIIS用FastCGIモジュールがREQUEST_URIなどのサーバー変数をUTF-8でやり取りできない問題の続き。
IIS5.1、IIS6についてはVer1.5 RTW+レジストリ操作で解決しましたが、IIS7.xにいては対応がまだでした。
が、やっとIIS7.0についてアップデートが提供されました。
http://blogs.iis.net/ruslany/archive/2010/03/10/important-update-for-iis-7-0-fastcgi-module.aspx
Windows7やWindowsServer2008R2のIIS7.5用FastCGIのアップデートはまだだがな!
なお、各OSでのFastCGI for IISの状況はこちら。
http://ruslany.net/2010/02/fastcgi-module-differences-across-iis-versions/
Using UTF-8 encoding for server variable valuesがIIS7.5だけNoという。
いやこれ、実質URIにマルチバイトを含めないわけで、非英語圏のアプリケーション的には致命度が半端ないんですが…
Windows Server AppFabric Beta1を試す~その1~
12月と1月は妙に忙しく、まったく検証できなかったので今更ながらWindows Server AppFabricを試していきます。
まずはこちら。英語ですが。
http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx
インストーラはこちらにあります。
が、依存プログラムが多いので、Web Platform Installer 2.0からインストールした方が楽ちんです。
http://www.microsoft.com/web/downloads/platform.aspx
WebPIを起動。
左下のオプションをクリックして、
エンタープライズにチェックをつけます。というかせっかくなので全部にチェックをつけておきます。
すると、WebPIの画面にEnterpriseにタブが出てきます。タブをクリックして、「カスタマイズ」をクリックすると、
AppFabric Beta 1がチェック可能になります。
あとはインストールすれば完了。ただし、注意点が二つ。
- すでにDeveloper版が入っている状態でもSQL Server 2008 Expressをインストールされそうになる
- Windows Firewallが有効になっていないと、Velocityの設定で失敗する
特に後者が致命的なのでご注意ください。アンチウィルスがファイアーウォール機能を備えているからといって、Windowsファイアーウォールを有効にしてると、
Velocity(Microsoft Distributed Cache)用のファイアウォール例外を追加するのに失敗しやがります。
ちなみに前者については、今試したらSQL Server (SQLEXPRESS)のサービスを新規に作りやがりました。ご注意ください。
…と、ここまで書いておいてナンですが、私の環境ではWebPIではDistributedCacheのサービスが動いてないので、手動で再度インストールします。
(というか、会社の環境でもWebPIでうまくいった試しが無い、というかConfigurationWizardが立ち上がらない)
上の方に書いたDownloads/DetailのページからAppFabric Beta1のインストーラをダウンロード(asesetup_amd64_6.1.exe)して、右クリック→管理者として実行をクリック。
WebPIでインストールしてしまっていたので、いったんRemoveします。再起動して、AppFabric Beta1のインストーラを再度実行。
規約を読んで次へ。
DistributedCacheをインストールするよう、チェックをつけて次へ。
DBへのConnectionStringsを指定されるので、前もってMonitoringとPersistence、DistributedCache用のDBを作成しておきましょう。
こんな感じでDistributedCacheの設定をします。こっちもEditボタンで、DBを指定しておきましょう。
後は次へボタンでインストール完了。こちらもWindowsファイアーウォールが有効になってないと、例外追加で失敗するのでご注意。
無事インストールが完了すると、サービス一覧に Microsoft project code named “Velocity” CTP4として追加されます。
続きは次回。
FastCGI 1.5 for IIS6でREQUEST_URIが文字化けする件の解決
こちらのエントリで書いた、FastCGI for IISでのREQUEST_URIの文字化け問題ですが、iis.netのページにこんな情報がありました。
Configure the FastCGI Extension for IIS 6.0
Using UTF-8 encoding for server variables
By default, FastCGI extension uses ASCII encoding when setting server variables that are used by PHP. When requested URL contains non-ASCII characters, then server variables that derive their values from the requested URL string may be set incorrectly. PHP applications that rely on those server variables may not work because of that.
To prevent this the FastCGI extension can be configured to use UTF-8 encoding when setting server variables. To configure FastCGI to use UTF-8 encoding for a particular set of server variables, use the REG_MULTI_SZ registry key FastCGIUtf8ServerVariables and set its value to a list of server variable names, for example:
reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\w3svc\Parameters /v FastCGIUtf8ServerVariables /t REG_MULTI_SZ /d REQUEST_URI\0PATH_INFO
The above example will configure FastCGI extension to use UTF-8 encoding when setting REQUEST_URI and PATH_INFO server variables.
After setting the registry key restart the IIS by using the iisreset command.
Warning: using UTF-8 encoding for server variables may affect how PHP core and PHP applications work. Make sure to verify that applications work as expected after the registry key has been changed.
1月にやっとリリースされたRTW版で追加されたオプションのようです。要は、デフォ設定だとREQUEST_URIやPATH_INFOをUTF-8でやりとり出来ないと。
というわけなので、コマンドラインで上記レジストリエントリへの追加をして、IISのサービスを再起動して完了。
WordPressのclasses.phpを修正していたのを戻して、エントリ単品の記事へ正常にアクセス出来る事が確認できました。
しかしなんでデフォでこんな仕様なんだろう…





















