2011-11-16 10 views
5

IHttpHandlerメソッドを使用して.Net-Project内でXSP以上のmod_monoを使用したいと思います。MonoとIHttpHandler

私は次のクラス(非常に簡単持っている:それはIISの中に完全に取り組んでいる

public class Class1 : IHttpHandler 
{ 
    public bool IsReusable 
    { 
     get { return false; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     var result = "<h1>Yeah</h1>"; 
     var bytes = Encoding.UTF8.GetBytes(result); 

     context.Response.Write(result); 
    } 
} 

そして、次のweb.config

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <handlers accessPolicy="Read, Execute, Script"> 
      <add name="Class" path="*" verb="*" type="IISHost.Class1" resourceType="Unspecified" preCondition="integratedMode" /> 
     </handlers> 
    </system.webServer> 
    <system.web> 
     <compilation defaultLanguage="c#" /> 
    </system.web> 
</configuration> 

http://127.0.0.1/test/kfdlsaリターン 'うん'

以内XSPやmod_monoをApache上で実行すると、.Net-Frameworkに従って完全に解析され、実行されるindex.aspxを作成できますが、ハンドラはそうではないようですmod_mono-Frameworkに含まれています。

IHttpHandlerは実際にMono内で実装されていますか、または特定のホストおよび/または仮想ディレクトリへのすべての要求を収集する別の方法を使用する必要があります。

答えて

11

HTTPハンドラとモジュールはMonoで正常に動作します。

問題は、Web.configファイルがIISの「統合パイプライン」モードに固有の構文を使用していることです。このモードはApache/mod_monoでは存在しません。古い構文(「クラシックパイプライン」モード用)を使用し、既存の<system.webServer/handlers>セクションに加えて<system.web/httpHandlers>セクションを提供する必要があります。

はこの Web.config例を参照してください:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <httpHandlers> 
      <add path="*.rss" verb="*" type="CedricBelin.Web.FeedHandler" /> 
     </httpHandlers> 
    </system.web> 

    <system.webServer> 
     <handlers> 
      <add name="Feed" path="*.rss" verb="*" type="CedricBelin.Web.FeedHandler" /> 
     </handlers> 

     <validation validateIntegratedModeConfiguration="false" /> 
    </system.webServer> 
</configuration> 

<validation ...>タグは非常に重要です:あなたはそれを忘れている場合、IISはエラーをスローし、不正なセクションでは、統合されたパイプラインのコンテキストで使用されていることを訴えます。

次のステップでは、このように、mod_monoためにあなたのファイルの取り扱いを転送するためにApacheサーバに指示することです。

<VirtualHost *:80> 
    ServerName mono.localhost 
    DocumentRoot "/Library/WebServer/Documents/MonoTest" 
    AddType application/x-asp-net .rss 
</VirtualHost> 

ラインAddType application/x-asp-net .rssは重要なものです。この行のpath="*.rss"Web.config.rssの関係を参照してください。 例(path="*")のようにすべての内線番号を処理する場合は、AddType application/x-asp-net .rssForceType application/x-asp-netに置き換える必要があります。

+0

セドリック、あなたの有益な答えに感謝します。私は静的変数の生涯に関係する質問をホスティングしている同様のモノラルウェブを持っています。私はあなたの入力が大好きです。http://stackoverflow.com/questions/13480328/c-sharp-mono-linux-web-server-hosting-with-consistent -static-variables-across – Glenn

+0

完全に動作します!ありがとうございました。私はスタンドアロン(mod_monoではなく)モードでXSPを使用しています。そのため、このシナリオではApacheの設定は必要ありませんが、web.configの変更は必要なものです。 –

+0

Mono.WebServerのweb.configでサポートされている情報はどのように取得されますか? – DonDon