PG.Lib

アプリ開発関連とかガジェット関連とか

Windows Server 2008 R2 (IIS7.5) で SignalR、WebAPIを動かしたい!

ということでやってみました!

以下、覚書。

Server環境

・WindowsServer 2008 R2 が動く環境準備

.net framework 4.0 インストール

IISの機能有効化

・DefaultWebSite へ アプリケーションの追加

・アプリケーション プール を、ASP.NET v4.0 に変更。

.Net Framework バージョン4.0

パイプラインモード統合

コーディング

ここでは、Visual Studio 2012 で説明

・新しいプロジェクトで、ASP.NET MVC4 Web アプリケーションを選択

・テンプレートは 空 を選択(適当)

・ビューエンジンは Razor を選択(適当)

こことか、ここを参考に、SignalRのサイトをコーディング

・Global.asaxの作り直し(ここで結構ハマった!以降で説明)

・適当にMVCコントローラ追加(Homeにするとデフォルトで表示される)

・追加したコントローラにビューを追加

・ビューをコーディング(ここで結構ハマった!以降で説明)

・適当にAPIコントローラ追加

・ビルド、発行

・WS2008R2へ配置

ブラウザで見てみよう!!

・・・・動いているはず!

WebAPIもjsonがダウンロードできるはず!

注意した点/ハマった点

デフォルトで自動作成されている Global.asax の Class が違う

いったん消して、追加 → 新しい項目 → グローバル アプリケーション クラス で作成する

名前空間もいくつか足りないので追加する

中身は概ね以下の様な感じ

[csharp] using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.Web.Routing; using System.Web.Mvc; using System.Web.Http;

namespace TestSignalR { public class Global : System.Web.HttpApplication {

    protected void Application_Start(object sender, EventArgs e)
    {

        AreaRegistration.RegisterAllAreas();

        RouteTable.Routes.MapHubs();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);

    }
}

} [/csharp]

他のイベント(Session_Startとか)は、不要だったら消す

JavaScriptの読み込み先は、Url.Content()を使う

でないとWebサイトのディレクトリ名がキチンと取れない

SignalR のコーディング

当初こっちを参考に作っていたが、プロキシオブジェクトが作れなかった

というか、デバッグでは動くが、WS2008実装時に接続が開始されない

signalrフォルダを探しに行くが、Webサイトのディレクトリが取れない感じ

本来は

http://hogehoge/testsite/signalr/negotiate?

となるところが、

http://hogehoge/signalr/negotiate?

で、接続しようとして、JavaScriptが 404 になってしまう模様

以下2点を修正

・オブジェクト作成箇所

[csharp] var connection = $.hubConnection(); var echo = connection.createHubProxy("echo"); [/csharp]

[csharp] var echo = $.connection.echo; [/csharp]

・接続開始箇所

[csharp] connection.start(function () { / 処理 / }); [/csharp]

[csharp] $.connection.hub.start().done(function () { / 処理 / }); [/csharp]

コピペで動くって思っちゃいかんね!!理解しないとっ!

おわりに

.net framework のバージョンを 4.5 で、Sv/Cl統一して環境作成をトライしてたけど、IIS上での認識がうまくいかず断念してました

試行錯誤してたので、もしかしたら 4.5 でも動作できるかもね

結構苦労したので、のちのちの為に本気でメモメモ。