2011年4月30日土曜日

C# (ASP.NET) でREST Service作成

開発環境はVisual Studio 2010、運用というかテスト環境は、Windows XP Pro + IIS5.1。これら環境に特別な意味はなく、たんに手元にあったから。

さて、参考にしたのは、10 行でズバリ!! REST サービスの作成 (C#)。この記事の一番最後に載っていた、WCF REST Starter Kitを使って、サンプルを作ってみた。
VS2010でプロジェクトを作るだけで、Hello Worldは簡単に作成完了。デバッグ実行も普通に動き、http://localhost:port/Service1/でアクセスしたら、[WebGet(UriTemplate = "")]で指定されたメソッドが実行された。
後は、これをデプロイするためにパッケージを作成する。IISのhttp://machine_name/testにデプロイするための設定。プロジェクトを右クリック、[パッケージ化/発行の設定]を選ぶ。[対象サーバーで使用する IIS Web サイト/アプリケーション名]でデフォルトの"Default Web Site/WcfRestService1_deploy" から "/lm/w3svc/1/ROOT/test"に変更。再びプロジェクトを右クリックし、[配置パッケージの作成]を選び、パッケージ及びデプロイコマンドが生成された。
とここまでは、簡単にいったものの、実際にデプロイしようとしたらおおはまり。まず、Windows XPに.net Framework 4.0をインストール。そして、デプロイコマンドを叩くと、deploytoolがインストールされていないと怒られたので、deploy toolをインストール。デプロイはうまくいったものの、アクセスしても403または404。いろいろ調べ、svcがIISに関連づけられていないとの情報を得たため、

%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe /i /x

を実行(最終的にこれが必要だったかどうかは不明)。それでも変わらず。

いろいろ調べてみると、WCF REST Starter Kitでは、svcファイルは使わずに、Fileless Activationという仕組みを使っているようだ。これは、web.configの設定とコードのみで、Web Serviceの設定を行うもの。http://sankarsan.wordpress.com/2010/06/06/fileless-activation-of-wcf-service-in-net-4-0/に詳しく載っている。
実際にコードを見ると、Global.asax.csに

// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));

とあり、ここでbindingをしていることがわかる。さてここで、web.configにUrlRoutingの設定をする必要があるのだが、デフォルトでは、IIS7.0用の設定になっているため、IIS5.1では動かない。とりあえず、6.0用の設定に書き換えてみたものの、変わらず。
もっと調べてみると、このUrlRoutingを行うためには、IISにモジュールを入れないといけないそうな。そして、それをIIS5.1で入れる方法はさっぱりわからない。

というわけで、このFileless Activationは断念。WCF REST Starter Kitではなく、普通にWCFサービスから作成することにした。
結局やったのは、10 行でズバリ!! REST サービスの作成 (C#)に書かれている事をそのまま。動かしてみたらIIS5.1でもhttp://localhost/WcfService1/OrderService.svc/orders/3 にアクセスしたらあっさり動いた。最初から、この方法でやっておけば・・・

2011年3月21日月曜日

Huit 中目黒

中目黒から南に歩いたところ、目黒側沿いにあるHuitにてランチ。
店内はジャズが流れ、活気のある、それでいてちょっと上品なヨーロッパの食堂といった感じ。わいわいがやがやといった雰囲気ではなく、少し落ち着きがある感じ。隣の客が英語をしゃべっていたので、余計にそんな感じをうけてしまったのかもしれない。
ランチメニューはいくつかあった中から、オーソドックス(?)なプレートメニューを選択。野菜も肉もバランス良く使われ、おいしかった。味付けは日本人好みというか、ドイツで似たようなものを食べたときよりも、あっさりして食べやすかった。

BISTRO KHAMSA

目黒側沿いにあるBISTRO KHAMSAへ。祝日の昼間でしかも雨が降っていたので、店内はそんなに混んでいなかったが、店自体それほど大きくないので、夜とかは予約した方がいいのかも。周りは予約客ぽかった。
さて、値段は少し高かったが、味はそれ以上においしかった。絶対的な値段の安さは追求できないものの、コストパフォーマンスはかなり高い。周りの客も料理を褒めていたぐらい(逆にそれだけ店内は狭いが、決して不快ではなかった)。また高いといってもそれほど高くなく、プチ高いぐらいなので気軽に行ける。
接客もしっかりしており、前菜を食べ終わって、少し待つと、すぐにメインがやってきた。周りを見ている限り、必ずしも急いで作っているわけではなく、客を見ながら料理をサーブしているようだ。もちろん、たまたまかもしれないが。
今回、ワインを飲まなかったが、ワインの種類も豊富そうで、そちらも楽しみ。もちろん、料理だけで十分楽しめる。

2011年3月12日土曜日

Pizzeria e trattoria da ISA

中目黒駅から山手通りを北上したところにあるPizzeria e trattoria da ISAに行ってきた。
14:00近くだったのに店内は満席に近い状態。
注文したのは、シンプルなマルガリータ。形は円ではなく楕円で、手作り感が漂っていたが逆にそういうところが期待を膨らませる。マルガリータは、トマトとチーズを中心にしたシンプルなものだったが、一口目から美味しかった。生地が薄めではあったが、個人的には特に問題ない。ただ、中心部はチーズと油で崩壊しかかっていたが。
また行って他のメニューにもトライしたい。

2011年3月9日水曜日

まえだや

昔の会社の同期と、中目黒で待ち合わせをし、ジンギスカンを食べに行った。店は、まえだや
お店はこぢんまりとしていて一軒家のよう。紹介されないと見つけられないような場所にあった。
ジンギスカンはなかなか。においもきつくなく、普通においしく食べられました。
メニューはそんなに多くないが、ジンギスカンを頼めば野菜も食べられるので満足です。

2011年3月5日土曜日

Eclipse CDTでAttach Process

Ubuntuを用意し、Package ManagerからEclipse CDT + g++をインストール。
Hello Worldプロジェクトを作り、以下のようなプログラムを作成

#include
#include
#include

int main(void) {
puts("Hello World!!!");
while (true) {
sleep(1);
puts("xxx");
}
return EXIT_SUCCESS;


Eclipse上で普通にデバッグ実行した場合は問題なかったが、Attachした場合にはエラーで何もできなかった。どうもptraceのpermissionがよろしくないようだ。そこで、

$ sudo vi /etc/sysctrl.d/10-ptrace.conf

を実行しファイルを変更、1となっていたのをmore permissiveな0に変更。変更しただけでは、最初うまくできなかったが、OSをRestartしたらうまくいった。

プログラムをコンソールで実行後、EclipseからAttachとしたらうまくつながった。Attach直後は、一時停止となり、実行ボタンをおしたら、普通に動き出した。もちろん、変数の中身などは普通に表示されるようになった。

VNCが動かない

Ubuntu(10.04LTS)マシンをVNC経由で操作しようとしたが、うまく動かない。ログイン画面は表示され、そこでマウス・キーボードは普通に動く。しかし、いざログインが成功し、実際に使おうとすると、画面が更新されない。マウスは普通に動くので、いろいろクリックしてみるが反応なし。
ところが、いったんクライアント側でVNCを終了させ、最後接続しなおしてみると、さきほどクリックした結果が出ている。要は画面更新が何かおかしいようだ。

http://dimemannico2.blog44.fc2.com/blog-entry-273.html
https://forums.ubuntulinux.jp/viewtopic.php?pid=30768


あと、ついでにNXというのも初めて使ってみたけど、これはこれでよいと思う。ただ、WindowsのRemote Desktop(やvino)のように、リアルなセッション(普通にログインしたセッション)を引き継ぐのではなく、新しいセッションを作成するので、使い分けが必要。