mono Webサービスホストの構築

インストールするもの

データベースホストと同様にOpenSUSEをインストールします。

ここでは、TextモードではなくGUI付きでインストールします。

 

インストールソフトウェアの設定では必要のない

  • マルチメディア
  • オフィスソフトウェア
  • グラフィックス
  • ゲーム

は除外しておきます。

インストール後、ひとまず「NAT」と「ホストオンリーネットワーク」にDHCP、「内部ネットワーク」に固定IPを設定します.

 

[アプリケーション] - [システムツール] - [YaST] - [ネットワーク設定]

また、[YaST] - [オンライン更新]

 

でシステムを更新しておきます.

さらに、VirtualBoxアドオンをインストールするために

 

[YaST] - [ソフトウェア管理]から、

  • gcc
  • make
  • kernel-desktop-devel

を検索、インストールします.

 

インストール後、VirtualBoxの「Guest Additions」をメニューのデバイスから選択し、VBoxLinuxAddtions.runを実行します.

ここで、一旦再起動しておきます.

 

再起動後、VirtualBoxの共有フォルダがマウントできる確認します.

 

$ su

# mkdir /mnt/hostfs

# mount -t vboxsf [共有フォルダ名] /mnt/hostfs

# ls /mnt/hostfs

 

起動時に自動でマウントしたい場合は/etc/fstabに追加しておいてください.


続いて、YaSTよりApacheをインストールします.

2.2.21の最新版が見つかったので、このままインストールします.

 

ホストオンリーネットワークNICのファイヤーウォールのhttpサービスを開放し、Apache2サービスを起動します.

 

# service apache2 start

 

さらに、起動時に自動でサービスを立ち上げるために

 

# chkconfig --level 2345 apache2 on

# chkconfig --list apache2

 

と設定しておき、ホストOSからアクセスできることを確認します.

 

次は、monoです.検索結果は2.10.6でした.最新ではありませんが、このままインストールします. YaST上からmonoで検索し

 

  • mono_complete
  • apache2-mod_mono
  • monodevelop(オプション)

を選択、インストールします.

ここまでで、ひとまずサンプルが動くことを確認します.

 

Windows上のVS2010で簡単なFluent NHibernateサンプルをコマンドラインアプリケーションで作成し、先にインストールしたデータベースホストへ正常に読み書きできていることを確認します.サンプルはこの辺を参照.

(あー、表示されているデータは適当です.あしからず)

つぎに、データベースの接続先を内部ネットワーク経由で接続するように変更し、リビルドしておきます.

このVS2010のRelease出力フォルダを丸ごと共有フォルダ経由でOpenSUSEへコピーします.

OpenSUSE側ではexeをmonoコマンドで起動します.

 

$ mono ./FlientNHibernateSample.exe 

おっ、同じ結果が返ってきました.

ひとまずはOKです.

最後にmod_monoの設定をします.

YaSTでインストールされると、

/etc/apache2/conf.d/mod_mono.conf

が生成されているので、サーバーパスを設定します.

これで、ホスティングアプリが.Net4.0ベースであることもを指定します.

<IfModule !mod_mono.c>

    LoadModule mono_module /usr/lib(64)/apache2/mod_mono.so

</IfModule>
<IfModule mod_headers.c>

    Header set X-Powered-By "Mono"

</IfModule>

 

# 以下2行を追加

MonoServerPath /usr/bin/mod-mono-server4

MonoSetEnv LANG=ja_JP.UTF-8


AddType application/x-asp-net .aspx

 

さらに、

/etc/apache2/httpd.conf

に下記を追加します.

(注意:追加しなくても動くみたいです.)

Include /etc/apache2/conf.d/mod_mono.conf

ここで、Apacheを再起動します.

 

# service apache2 restart

 

これで、mod_monoの設定は完了です.

最後に、簡単なサンプルを動かしてみます.

 

デフォルトのドキュメントルートは

/srv/www/htdocs

なので、そこにテスト用ディレクトリを作成します.

 

# mkdir -p /srv/www/htdocs/mono/test

# chmod 777 /srv/www/htdocs/mono/test

 

そこに、VS2010で作成したWebアプリケーションサンプルを発行したものを丸ごとコピーします.

 

ここで、一点注意することがあります.

「Site.Master」というファイルがありますが、コード内では

 

<%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"    CodeBehind="Default.aspx.cs" Inherits="WebApplicationSample01._Default" %>

 

と、設定されておりWindowsでは動作するのですが、Linux上では大文字と小文字が厳格に区別されるために、「ファイルが無い」とエラーを吐きます.

 

コード内の拡張子を修正するか、.Masterファイル名拡張子を.mastarに変更するかで統一しておいてください.

 

ホストPCからアクセスすると、レイアウトは少し崩れますが同じ内容で表示されます.

最後に、NHibernateを使ってPostgreSQLデータベースからデータを取得し、WebサービスとしてSOAPレスポンスを返すサンプルアプリケーションを作成します.