【Windows】ASP.NET + mono 【Unix】

このエントリーをはてなブックマークに追加
1nobodyさん
ASP.NETプログラムをVisualStudioで作成して
monoを使って運用する人たちのスレ。

本スレでやると邪魔になりそうなので立ててみました。
あまり、実運用している人はいなさそうですが、
実際どこまで使えるものなのか、細々と情報交換して
いきませんか
2nobodyさん:2006/02/12(日) 17:51:11 ID:Z3GkMZ4D
2get
3nobodyさん:2006/02/12(日) 20:11:25 ID:???
ツカエネー
3get
4nobodyさん:2006/02/15(水) 09:10:51 ID:dv8dzDUh
今ASP.NETじゃなくてmonoでCGIやってます。
ASP.NETも他の名前空間と同じくらい安定してるならASP.NETに変えようかなと思ってるんだけど
どうですか?
5nobodyさん:2006/02/15(水) 10:24:12 ID:jYrQrxr0
monoでCGIする方法ってどうやるの?
厳密はCGIでsystem.web名前空間のパッケージとかが利用できるのかって事です。

日本語のドキュメントが見当たらないので断念してました。
6nobodyさん:2006/02/15(水) 10:55:29 ID:CpsTFvCL
>>5
CGIってのは基本的には標準入出力と環境変数の読み取りできるならどんなプログラム形態でも可能。

C#で環境変数を列挙するCGI。

Console.WriteLine("Content-Type: text/html");
Console.WriteLine();
Console.WriteLine("<html><head></head><body><table>")

IDctionary dic = Environment.GetEnvironmentVariables();
foreach(DictionaryEntry env in dic){
Console.WriteLine("<tr><td>{0}</td><td>{1}</td></tr>", env.Key, env.Value);
}

Console.WriteLine("</table></body></html>");

Widowsで.NET Frameworkを使う場合はexeをそのまま動かせばいいし
monoの場合は

#! /usr/bin/mono nantoka.exe

って1行書いたテキストファイルを実行権限つけておけばいい
7nobodyさん:2006/02/16(木) 00:46:48 ID:Kp4NJC5o
>>6
詳しい説明ありがとう。
エンティティヘッダを出力すれば後は標準入出力で処理できるのは分かるんだけど、
System.Webパッケージが使えないとC#を使うメリットが減るじゃない?
Pageクラスを継承して処理できないかなぁ。
8nobodyさん:2006/02/17(金) 13:52:21 ID:???
ここでもみて勉強しれ
http://www.monomagazine.com/monoonline/
9nobodyさん:2006/02/19(日) 22:28:28 ID:2Dt3qIWq BE:624413669-
Apache2.2.0にmod_monoインストールしてみた
トラブッたのでなんかの参考になるかもしれないので書いておきます。

FedoraCore4使ってます。
monoとxspはyumでインストールしたんでRPM管理下なんですけどすけど
Apacheは2.2.0を自分でソースからインストールしてるんで、管理外です。
mod_monoを使いたくなったので、tarボールをダウンロードしてコンパイルに挑戦。

./configure --prefix=/usr --with-apxs=/usr/local/apache2/bin/apxs

とやってみたが、APRが1.22なのがわからない?ようで、さらにオプションで
--with-apr-config=/usr/local/apache2/bin/apr-1-config
が必要でした。

さてconfigureは通ったものの、Apache 1.3 とconfigureに認識されてしまいました。
ソースファイルを見ると、 APACHE13 ってシンボルと APACHE2 ってシンボルに分けられてました。
Makefileとsrc/Makefileを開いて手動で -DAPACHE13を -DAPACHE2 に置き換え。
さて make すると、エラーが発生します。

mod_mono.c:1167: error: too few arguments to function 'apr_socket_create'

APRのマニュアル( http://apr.apache.org/docs/apr/group__apr__network__io.html#ga6 ) を見てみると、確かに足りないです。
その下のApache1系用のソースを参考に、
 rv = apr_socket_create (sock, family, SOCK_STREAM, 0, pool);
に書き換え。無事make通りました。

これから設定してApache再起動です・・・動くのか不安
109:2006/02/19(日) 23:56:25 ID:2Dt3qIWq BE:277517546-
Apacheの設定ファイルをいじって準備完了となったので httpd -t でテストしたら、
そんな関数はないとエラーが出てしまった。
エラーを元に調べた。途中は長くなるので省略しますが

src/mod_mono.c の335行目
apr_sockaddr_port_get (&port, c->remote_addr);

port = c->remote_addr->port;

348行目
apr_sockaddr_port_get (&port, r->connection->local_addr);

port = r->connection->local_addr->port;

に修正。

CFLAGS='-DHAVE_APR_SOCKET_CONNECT'
を付けて configure し直した。

makeでerrorもwarningもなし。インストールして httpd -t で Syntax OK。
Apacheの再起動はちょっと今やりたくないんで、なにかあったらまた書きます。
11nobodyさん:2006/03/29(水) 13:18:34 ID:???
xspの安定度はどんなもんですか?
12nobodyさん:2006/06/13(火) 22:36:57 ID:wI6ysnNv
過疎スレのようですが、質問させて頂きます。

以下の環境:
 Gentoo Linux (x86):
 Linux 2.6.16 (binfmt_misc で .NET のプログラムを直接実行できるようにした)
 Apache/2.0.55 (mpm_worker)
 Mono JIT compiler version 1.1.13.2
で、.NET のプログラムを CGI として動作させようとしています。

CGI のソース:
 public sealed class MyClass
  : System.Object
 {
  public static void Main()
  {
   System.Console.WriteLine("Content-Type: text/html");
   System.Console.WriteLine();
   System.Console.WriteLine("Hello, World!");
  }
 }
(ここまで)

これをコンパイルした実行ファイルにブラウザからアクセスしようとすると、Internal Server Error が発生してしまいます。
どのようにすれば正しく動作するのでしょうか。どなたかご教授願います。
1312:2006/06/13(火) 22:38:47 ID:wI6ysnNv
Apache の httpd.conf 該当部分:
 <Directory /xxx/cgi-bin>
  AllowOverride All
  Options ExecCGI
  Order Allow,Deny
  Allow From All
  AddHandler cgi-script .cgi .exe
 </Directory>
(ここまで)

Apache の ScriptLog:
 %% 500 /xxx/hello.exe
 %request
 Host: xxxx.xxxxxxxx.org
 User-Agent: xxxxxxxx
 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
 Accept-Language: ja,en-us;q=0.7,en;q=0.3
 Accept-Encoding: gzip,deflate
 Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
 Keep-Alive: 300
 Connection: keep-alive
 %response
(ここまで)

Apache の ErrorLog:
 [Tue Jun 13 22:26:26 2006] [error] [client 192.168.0.2] Premature end of script headers: hello.exe
(ここまで)

* シェル上では正しく実行できました。
14nobodyさん:2006/06/14(水) 01:24:52 ID:???
>>12

>[Wed Jun 14 01:06:14 2006] [error] [client 192.168.0.10] mono: mono-codeman.c:257: new_codechunk: Assertion `!err' failed.
上ののエラーもあったら、SELinuxの設定を確認汁。

参考: ttp://www.gotmono.com/cgi-bin/yabb/YaBB.pl?board=ASPX;action=display;num=1120966236

それでも、
>[Wed Jun 14 01:13:22 2006] [error] [client 192.168.0.10] ** (/var/www/cgi-bin/test.cgi:4502): CRITICAL **: _wapi_shm_file_open: shared file [/var/www/.wapi/shared_data-oreore.localdomain-Linux-i686-308-10-0] open error: No such file or directory
とかエラーがでるなら、 /var/www/.wapiを作ってオーナーをapacheのユーザーにしてみれ。

これで動いたが、なんか違う気がする(^^;
15nobodyさん:2006/11/03(金) 00:57:34 ID:pVbGUuQX
微妙にスレの趣旨とは異なりますが、質問させて下さい。

CGIで動かしているperlスクリプトで`mono /xxx/yyy.exe`を実行すると
** (/xxx/yyy.exe:4504): CRITICAL **: _wapi_shm_file_open: shared file [/.wapi/shared_data-
reserve-Linux-i686-308-10-0] open error: そのようなファイルやディレクトリはありません
とエラーが出ます。

ところが同じperlスクリプトをシェルから実行すると正常に動きます。
何か環境変数等を設定する必要があるのでしょうか?
1615:2006/11/03(金) 07:41:30 ID:???
>>15
14の後半で書かれている内容と同じ方法で解決しました。
/.wapiを作ってapacheのユーザに書き込み可能なパーミッションを与えたらOKでした。
スレ汚しすいませんでした。
17nobodyさん:2007/10/29(月) 21:41:28 ID:GfMM9Nbj
Windows Serverに市場シェアを奪われるLinux
http://itpro.nikkeibp.co.jp/article/NEWS/20071029/285682/
18nobodyさん
mono project
http://www.mono-project.com/

消しゴムじゃないMONOを使ってみるスレ 2個目(プログラム板)
http://pc11.2ch.net/test/read.cgi/tech/1100616350/l50