Surface Pro欲しいです。
いいですよね。
Surface。
テスト機用にSurface2は仕事場にあって、その速さは実感済みなんですけど。
Surface Pro欲しいですよ。
個人的に。
SignalRを使おうとしてみた。
SignalRを使おうとしてみたのですが、何やらOWINに移行済みとか。
んで、OWINって何ぞや?とかやってみたんですが、まあ資料の少ないことw
しばやんさんのページにはホント助けられました。
そのほかにも、いろんなところでも。
それで、OWIN調べると、いろいろ嵌る嵌る。
日本語の資料が少ないのもあるんですが。
折角なので、忘備録的に書いておこうと思いまして。
手順。
ざっと手順としては、以下になります。
- WebRoleのプロジェクトを作る
- パッケージをインストールする
- web.configを手直しする
- OWINのStartupを作る
- NancyのModuleを作る
- Razorのビューを作る
それぞれはホントにちょこちょこっと入力するだけなので、理解してしまえばHello Worldをデプロイするまで30分くらいです。
プロジェクトを作る。
ここで試した環境は、Windows8 + Visual Studio 2013です。
まあ、Visual Studio 2013 Web版でも大丈夫っぽいです。
まずは普通にCloudのプロジェクトを作ってWebRoleを追加しておきます。
その際、WebRoleはEmptyで作っておきます。
また、参照でMVCにチェックを入れておくと、後々Razorのビューを作るときにIntelisenceが効きます。
![01 01](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5BIRT92Ge61T_wHFsXVxpUyVat_EU8f-WkGlIHO45mOYn23aaVpI4nSbrrr2tr43FsEzd2FnKg5OYP_eJq8f1tUO65WCwFCoIQlOG1IdkE1LJLoWAQBLZohwRJhkhHBYvP2_QM1NMZXq-/?imgmax=800)
パッケージをインストールする。
以下の3つのパッケージをインストールします。
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Nancy.Owin
Install-Package Nancy.Viewengines.Razor
web.configを手直しする。
以下の真ん中の行を追加しておきます。
<appSettings>
<add key="owin:HandleAllRequests" value="true"/>
</appSettings>
また、以下の行が2重化しているので1つ削除しておきます。
<add key="webPages:Enabled" value="false" />
OWINのStartupを作る。
パッケージをインストールすると、「追加」→「新しい項目」の一覧の中に「OWIN Startupクラス」というのが増えています。
これを使ってStartupクラスを作成します。
![02 02](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj34TRW7cuFAaAt402at9q35gAlTiwpLSCiUlcRvCDx0dLCKSM1JiKTvN0M_SUjldqcHHQYNWgQiALsOQRXhPb2XxAKX3A44lfSh5ysDBC2DV8-TxyuoqTkYFRlR5sLI3FI8aozzxF8Y0TZ/?imgmax=800)
Nancyのモジュールを作る。
Nancyでルーティングテーブルを作成するためにモジュールを作成します。
これは、MVCのControllerと同じようなもので、命名規則も似通っています。
クラス名はxxxModuleとして、xxxの部分を好きな名前に変えてください。
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = _ =>
{
ViewBag.Title = "Razor Page";
return View["index"];
};
}
}
View[]の中がRazorのビューのファイル名になります。
また、MVCで使うときとと同じようにViewBagが使えます。
Razorのビューを作る。
プロジェクトを作るときにMVCにチェックを入れておくと、基本的なディレクトリが作成されています。
RazorのビューはMVCで使うのと同じようにViewsディレクトリに作ります。
![03 03](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidc4zZ8eD1G-0zBLOFfCCYvrJmpFsMpTd5SlGB6JuCQSCebJXOiusLvR-vg-dm0pGr2EroA7X6mt7jUs7SE_p52X6HAAD6qn6K-UJT0hplR8e1ihyphenhyphenrUHRWa9AMgi24nuaeDWglh9lgrrcA/?imgmax=800)
Nancyのモジュールを作った際につけたクラス名xxxModuleのxxxの部分がViewsディレクトリの下に、そしてその下に拡張子.cshtmlを補う形でビューのファイルを作成します。
ビューのファイルは以下のようになります。
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
@{ Layout = "Shared/_Layout.cshtml";
}
<h3>Hello, world</h3>
基本的にはMVCの時と変わらないのですが、1行目にクラス情報を書きます。
細かく言うと、ビューファイルはC#のファイルを生成し、それをコンパイルすることで動きます。
1行目はその基底クラスの宣言になるようです。
(正確には@inheritsの行)
また、<>の中はNancyのモジュールでView[]を使用した際に2番目の引数の型になります。
この辺は気が向いたらまた書くかもしれません。
Layoutを使う際には、Viewsの下からのディレクトリ・ファイル名を書きます。
ここはMVC5のRazor用にビューを作ると、”~/Views/Shared/_Layout.cshtml”の様にパスが書かれてあります。
このままではNullPointerExceptionが出ますので気を付けてください。
以上でF5とか押してデバッグをするとHello, Worldが出ます。
Azureにデプロイする際の注意点。
このままAzureにデプロイすると、エラーになります。
それは、参照ファイルが足りないから。
「参照の追加」から、「アセンブリ」「拡張」ときて、Microsoft.Web.Infrastructureを追加して、「プロパティ」からローカルコピーをTrueに変えておいてください。
とりあえず。
本当はSignalRをやってみたいんですが、調べていくうちになんとなくこんな方向に行ってしまいました。
実はその前に
- OWINって何ぞや
- NancyってNode.jsのExpress.jsっぽ
- OWINが発展してEdge.jsとな
- おおお。Node.jsでC#のコード呼び出せるのか
- VSのプロジェクトにするかPowerShellで作ったものを使うか…
- Node.jsのVSのプロジェクトめんどい
- じゃ、MVCでいいじゃん
- SignalR…OWIN… ←イマココ
的な葛藤が。
次はNancyで行くかWebApiにするかで悩みそう。