5

IHttpHandler メソッドを使用して、.Net-Project 内で XSP またはより良い mod_mono を使用したいと思います。

私は次のクラスを持っています(非常に単純です:

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>

IIS内で完全に機能しています。http://127.0.0.1/test/kfdlsaは「はい」を返します

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

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

4

1 に答える 1

11

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

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

この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"この行のinWeb.config.rssextensionの関係を参照してください。例()のようにすべての拡張子を処理する場合は、行を。path="*"に置き換える必要があります。AddType application/x-asp-net .rssForceType application/x-asp-net

于 2012-01-13T02:19:00.987 に答える