2012年6月16日土曜日

[WinJS] CP版の Metro Style アプリをRP版に移行する時のメモ

Javascriptで作っていたメトロアプリが案の定動かなくなったので、その時の移行のメモです。
動的言語なので、オブジェクトの中身が変わっていても実行時にしかわからないのが痛いですね。
CP版のVS11で作成したアプリを、RP版のVS2012でビルドしなおす場合を想定しています。

(1) WinJSの参照をやり直す
CP版は0.6だったのですが、1.0.RCというバージョンになっています。
なので、一度参照を削除して再度追加してやる必要があります。



(2) default.htmlの参照を修正する
下記のように、WinJSへの参照の部分を、Microsoft.WinJS.0.6からMicrosoft.WinJS.1.0.RCに修正します。WinJSの参照をしなおしただけでは、自動で変わりませんので注意してください。


(3) RC版での変更に対応する
ビルドしただけでは分かりませんので、基本的には実行してみてエラーになった個所を潰していく感じになると思います。

Consumer Preview 以降のアプリ開発者向けの変更点
http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/06/07/consumer-preview.aspx

移行ガイド (英語)
http://go.microsoft.com/fwlink/?LinkID=251943


(4) WinJS.xhrでHttpWebRequestを行っていた場所を見直す
前述の移行ガイドでも見当たらなかったのですが、responseXMLの型が変更になっているみたいです。CP版の場合は、MSXMLに由来するMS独自拡張のselectNodesやselectSilgleNodeでXPath式を使って操作ができたのですが、RP版では変更(削除)されたようです。なので、これらを使っているプロジェクトの場合、実行時にエラーになります。

解決方法としては、新たにSelectors APIが使えるようになっていますので、querySelectorAllとかquerySelectorを代わりに使います。こちらは引数がCSSセレクタですので、XPath式からの書き換えも忘れずに。

例えば下記のように書き換えます。


item.selectSilgleNode("title").text; // CP版
↓
item.querySelector("title").textContent; //RP版


Release Candidate: Did responseXML change at all? selectNodes isn't a method anymore...
http://social.msdn.microsoft.com/Forums/sv-SE/winappswithhtml5/thread/2141429b-b7d3-46ef-a46b-5919e41d454f




2012年4月10日火曜日

OpenSSLでの証明書関連コマンドメモ

何回やっても覚えられないので・・・。自分用にまとめておきます。
IISで作成したCSRを署名したい場合は、CAによる署名を行った後、
DERに変換してやれば良いです。

・秘密鍵の作成
openssl genrsa -out keyfile.pem 2048

・CSRの作成
openssl req -new -key keyfile.pem -out csrfile.pem

・自己署名
openssl x509 -req -in csrfile.pem -signkey keyfile.pem -out certfile.pem

・CAによる署名
openssl ca -out certfile.pem -infiles csrfile.pem

・CAによる失効
openssl ca -revoke certfile.pem

・CRL発行
openssl ca -gencrl -out crl.pem

・CRL変換
openssl crl -in crl.pem -outform DER -out crl.der

・PEM->DER
openssl x509 -in file.pem -outform DER -out file.der

・DER->PEM
openssl x509 -inform DER -in file.der -outform PEM -out file.pem

・PKCS#12作成
openssl pkcs12 -export -in certfile.pem -inkey keyfile.pem -certfile rootca.pem -out file.p12

・PKCS#12作成(CAチェーンつき) ca.pem内に複数証明書を入れておく
openssl pkcs12 -export -in certfile.pem -inkey keyfile.pem -chain -CAfile ca.pem -out file.p12

・PKCS#12から秘密鍵のみ取り出す(暗号化の必要なければ-nodesをつける)
openssl pkcs12 -in input.pfx -nocerts -out output_key.pem

・PKCS#12からサーバー証明書のみ取り出す
openssl pkcs12 -in input.pfx -clcerts -nokeys -out output_crt.pem

・RSA秘密鍵のパスフレーズ削除
openssl rsa -in server.key -out server.key

※ファイル名は適当ですので読み替えてください

2011年2月19日土曜日

WASでnet.tcpやnet.pipeを使おうとするとエラーになる

IISのWAS(Windowsプロセスアクティブ化サービス)によるhttp以外のプロトコルによる
ホスティングを試そうと、有効なプロトコルにnet.tcpとnet.pipeを追加しました。



そうしたら下記エラーが発生。

プロトコル 'net.tcp' には、登録されている HostedTransportConfiguration 型が実装されていません

相変わらず全く意味が分かりませんね・・・。
原因は、Windowsの機能が一部インストールされていないからでした。
デフォルトでは入っていないみたいなので、注意してください。

2011年2月13日日曜日

参照設定で System.ServiceModel.Web が出て来ない

Visual Studio 2010 でWCFを使ってRESTfulサービスを作る場合は、下記参照の追加が必要です。
(コントラクトでWebGetAttributeなどを指定するため)

System.ServiceModel.Web

VS2010のWCFテンプレートを使ってプロジェクトを作成した場合、そのままでは参照の追加に出てきません。
プロジェクトのプロパティから[対象のフレームワーク]を変更してやる必要があるみたいです。


デフォルトでは.NET Framework 4 Client Profileになっていますが、.NET Framework 4に変更します。
Client Profileにはサーバーアプリケーション開発に必要なコンポーネントが含まれていないため、
このような操作が必要になってきます。

2011年1月31日月曜日

URL Rewrite 2.0 でURLやサーバー変数を書き換える

今回はIIS7で、URLやサーバー変数を書き換える方法のメモです。
アプリケーション側の都合で構成を変えたいが、公開URLは変更したくない場合などに有効です。
Apacheのmod_rewriteと同じようなことができます。

導入は、Microsoft Web Platform Installer 3.0を使うのが簡単です。
ますは、こちらからインストールしてください。


[製品] - [サーバー] の中から、[URL Rewrite 2.0] を見つけて追加ボタンを押します。


その後、下部の[インストール]ボタンを押し、続けて同意ボタンを押し終わるのを待ちます。
場合によっては依存関係にあるモジュールも自動でインストールされます。

※ここでは詳しく説明しませんが、リバースプロキシを構築したい場合は
   ARR (Application Request Routing) モジュールも必要です。


インストールが完了したら、IISマネージャーを起動します。
Default Web Siteを選択すると、「URL 書き換え」という機能が追加されているのが分かります。
ダブルクリックするか、右上の[機能を開く]を選択して設定画面を出します。
(全てのサイトにURL書き換えルールを適用したくない場合は、目的の仮想ディレクトリに移動して、
URL書き換え設定画面を開いてください)


右上の[規則の追加]を選択します。


「空の規則」を選択してOKを押します。


この画面で書き換えルールを設定します。


[名前]
作成するルールに好きな名前を付けます

[URLの一致]
正規表現 or ワイルドカード or 完全一致した場合だけ書き換えることができます。
正規表現での指定がオススメです。括弧で括っておくと、書き換えルールで変数として使えます。

たとえば、「(.*)/(.*)/.*」とした場合、{R:n}を書き換えルールで使うことができます。

{R:0} これはURL全体を指します
{R:1} これは一番目の括弧でマッチした文字列になります
{R:2} これは二番目の括弧でマッチした文字列になります


サーバー変数だけで判断したい場合は、すべて(.*)にしておいて、[条件]で指定します。

[条件]
IISのサーバー変数に一致した場合のみ書き換えを行いたい時は、ここで条件指定します。
また、サーバー変数を書き換えルールに使いたい場合もここで指定します。
書き換えルールでの指定は{C:n}になります。

[サーバー変数]
サーバー変数の書き換えを行いたい場合はここで指定します。
事前に書き換えマップに書き換えたいサーバー変数を登録しておく必要がありますので
注意してください。(URL Rewrite設定画面Topの右側メニュー[書き換えマップの表示]から行います)

[アクション]
URLの書き換えルールを設定します。
前述の変数を利用して、http://{R:1}/{C:1}/index.htmlなどと動的な書き換えもできます。
サーバー変数の書き換えだけが目的の場合はアクションは「なし」にしておきます。

ルールの設定が完了したら、右上の適用ボタンを押して保存してください。
すぐにルールが反映されるはずです。(IISの再起動は不要)


【参考】
設定方法の詳細は、下記のTechNetのページが参考になると思います。

URL 書き換えモジュールの送信ルールの作成

HTTP 要求ヘッダーおよび IIS サーバー変数の設定 (サーバー変数を書き換えたい場合)

URL 書き換え Version 2 と Application Request Routing を使用したリバース プロキシ


【補足】
IIS6の場合はURL Rewrite 2.0は使えませんが、
IIRF (Ionic's Isapi Rewrite Filter) というツールを使うと、ほぼ同じことができます。

2010年12月20日月曜日

Installer error 2869 の原因が分からない場合のヒント

このエラーの解析にかなり手間取ったのでメモしておきます。

インストール中に、下記のようなエラーダイアログが出て、ロールバックしてしまいました。
何回やっても駄目で、しかも特定の環境下でしか再現しない・・・。

The dialog SetupError has the error style bit set, but is not an error dialog.

う~ん、全く意味が分かりませんね!
とりあえず、直前のエントリで書いた方法で、詳細ログを取るとエラーコードは2869。
このエラーコードを頼りに調べていくと、こちらのブログを発見。

要するに、直前のカスタムアクションが失敗しているのが原因のようです。
エラーメッセージからは全く想像つきませんね・・・。
ログから直前のカスタムアクションを調べてみます。

MSI (s) (BC:10) [13:23:12:269]: Invoking remote custom action. 
DLL: C:\Windows\Installer\MSI7330.tmp, Entrypoint: ManagedInstall

これは、どうやら.NETのInstallerクラスを呼び出している所のようです。
ProjectInstallerではレジストリの書き換えとサービス登録をやっていた
のですが、レジストリの書き換えは失敗する余地がない。
消去法で、サービス登録が失敗しているのでは?と考えて調べてみると、
サービスがアンインストールされずに残ったままでした。
今回のケースでは、手動でサービスを消したら*解決しました。

* サービスは次のコマンドで削除できます(必要なサービスを誤って消さないように注意!)
sc.exe delete [サービス名]

【参考】
Windows Installer Error Messages (MSDN)
http://msdn.microsoft.com/en-us/library/aa372835(VS.85).aspx

2010年12月19日日曜日

Setup.exeで詳細ログを出力する方法

msiで詳細ログを出力できることは知っていましたが、Setup.exeでも可能なようです。
リリースする場合は、InstallShieldなどで単一のSetup.exeにまとめている場合が
多いと思いますが、何か問題が発生した場合の解析に便利です。

まずはmsiの場合の復習。

msiexec /i Installer.msi /L*v "C:\Install.log"

setup.exeの場合は次の通り。

setup.exe /v"/L*v C:\Install.log"

/vオプションに続けてダブルクォーテーションで囲んだ形で指定すればOKのようです。