C#のお勉強はいいけど、そろそろASP.NETの勉強もしなきゃと思い、お勉強をスタート
どうせお勉強するならと、CodeZineの「ASP.NETでCometを利用したチャットを実装する」を試してみる。
このページは、Visual Studio 2005を想定しているが、Visual Web Developer 2008 Expressで試してみる。
先のサイトから、プロジェクトをダウンロードして、zipを展開する。ターゲットは、C:Users[ユーザー名]DocumentsVisual Studio 2008ProjectsSampleCometChat に。
Visual Web Developer 2008 Expressを起動して、メニューの「Webサイトを開く」を選ぶ。ダイアログが出るので、「ファイルシステム」を選んでから、先のフォルダを選択、「開く」を押す。
デバッグを始める前に、IEをセットアップして、デバッグできるようにする。IEのメニューの「ツール」-「インターネットオプション」を選ぶ。インターネットオプションダイアログがでるので、「詳細設定」タブから、「設定」の中の、「ブラウズ」-「スクリプトデバッグを使用しない (Internet Explorer)」のチェックをはずして、IEを終了しておく。
あとは、Visual Web Developer上で、F5を押すか、メニューの「デバッグ」-「デバッグの開始」でIEが起動して、実行ができる。
この状態で、クライアント側も、サーバ側もデバッグできる。しかし、デバッグ中にファイルの編集をしても、デバッグには反映されない。
新規作成でプロジェクトを作った場合、C:Users[ユーザー名]DocumentsVisual Studio 2008Projects[プロジェクト名] にslnができる。実際のファイルは、C:Users[ユーザー名]DocumentsVisual Studio 2008WebSites[プロジェクト名] にできる。こいつをコピーすれはOKな模様。
さて、Vista上でのMonoに挑戦。Monoは、1.2.6。「Mono for Windows, Gtk# and XSP」ってやつで、msiがあるので、それをインストール。
左下のすべてのプログラムの中に、Mono 1.2.6 for Windowsってのがあって、そこに、Mono-1.2.6 Command Promptがあるので、これを選択。
先のWebSitesの下に移動して、xsp2と入力すると、ポート8080でWebサーバが起動。IEでhttp://localhost:8080/ とやって表示すると。。。
あら、動きません。
Server Error in ‘/’ Application
Compilation Error
Description: Error compiling a resource required to service this request. Review your source file and modify it to fix this error.
Error message:
(0,0) : error : at Mono.CSharp.CompilerGeneratedClass..ctor (Mono.CSharp.DeclSpace parent, Mono.CSharp.MemberName name, Int32 mod, Location loc) [0x00000]
(0,0) : error : at Mono.CSharp.CompilerGeneratedClass..ctor (Mono.CSharp.DeclSpace parent, Mono.CSharp.GenericMethod generic, Int32 mod, Location loc) [0x00000]
(0,0) : error : at Mono.CSharp.ScopeInfo..ctor (Mono.CSharp.Block block, Mono.CSharp.DeclSpace parent, Mono.CSharp.GenericMethod generic) [0x00000]
(0,0) : error : at Mono.CSharp.ScopeInfo.CreateScope (Mono.CSharp.Block block) [0x00000]
(0,0) : error : at Mono.CSharp.Block.CreateScopeInfo () [0x00000]途中略
(0,0) : error : at Mono.CSharp.TypeContainer.DoResolveFieldInitializers (Mono.CSharp.EmitContext ec) [0x00000]
(0,0) : error : at Mono.CSharp.TypeContainer.ResolveFieldInitializers (Mono.CSharp.EmitContext ec) [0x00000]
(0,0) : error : at Mono.CSharp.Constructor.Emit () [0x00000]
(0,0) : error : at Mono.CSharp.TypeContainer.EmitType () [0x00000]
(0,0) : error : at Mono.CSharp.RootContext.EmitCode () [0x00000]
(0,0) : error : at Mono.CSharp.Driver.MainDriver (System.String[] args) [0x00000]
(0,0) : error : at Mono.CSharp.Driver.Main (System.String[] args) [0x00000]
う~ん。原因不明。もっと定番なプロジェクトから挑戦しなきゃだめだな。
次に、Linuxの上のMonoで挑戦。
apt-get install mono
apt-get install mono-xsp2
ファイルをコピーして、同様に、xsp2。IEでアクセスすると。。。動きません。
System.TypeInitializationException: An exception was thrown by the type initializer for Mono.WebServer.XSPWorkerRequest
Server stack trace:
at <0x00000> <unknown method>
at Mono.WebServer.XSPApplicationHost.ProcessRequest (Int32 reqId, Int64 localEPAddr, Int32 localEPPort, Int64 remoteEPAdds, Int32 remoteEPPort, System.String verb, System.String path, System.String queryString, System.String protocol, System.Byte[] inputBuffer, System.String redirect, IntPtr socket, Mono.WebServer.SslInformations ssl) [0x00000]
at (wrapper remoting-invoke-with-check) Mono.WebServer.XSPApplicationHost:ProcessRequest (int,long,int,long,int,string,string,string,string,byte[],string,intptr,Mono.WebServer.SslInformations)
at (wrapper xdomain-dispatch) Mono.WebServer.XSPApplicationHost:ProcessRequest (object,byte[]&,byte[]&,int,long,int,long,int,string,string,string,string,byte[],string)
以下略
Googleで検索すると、
Mono does not support the <system.webServer> configuration section.
Remove it from web.config
ありゃ、さいですか。web.configを編集して、該当部分を削除。
やっぱり動きません。
Server error in ‘/’ application
Description: Error processing request.
Error Message: HTTP 500.
Stack Trace:
System.BadImageFormatException: Could not load file or assembly ‘/tmp/root-temp-aspnet-0/2e347ec0/App_Code.9ee5ebb.dll’ or one of its dependencies. An attempt was made to load a program with an incorrect format. File name: ‘/tmp/root-temp-aspnet-0/2e347ec0/App_Code.9ee5ebb.dll’
at <0x00000> <unknown method>
at (wrapper managed-to-native) System.Reflection.Assembly:LoadFrom (string,bool)
at System.Reflection.Assembly.LoadFrom (System.String assemblyFile) [0x00000]
at Mono.CSharp.CSharpCodeCompiler.CompileFromFileBatch
(System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x00000]
途中略
at System.Web.Compilation.AppCodeCompiler.Compile () [0x00000]
at System.Web.HttpApplicationFactory.InitType (System.Web.HttpContext context) [0x00000]
at System.Web.HttpApplicationFactory.GetApplication (System.Web.HttpContext context) [0x00000]
at System.Web.HttpRuntime.RealProcessRequest (System.Object o) [0x00000]
/tmpをのぞいてみると、App_Code.***.dllのファイルサイズが0になっている。
なんか根本的に勘違いしてるんだろうか。。。。
ちゃんと、.NET2.0にしてるんだけどなぁ。
ふと気がついたんだけど、Debianでapt-getしてきた、monoは1.2.2.1みたい。。。自分でコンパイルするのか。はぁ。