【问题标题】:Mono and IHttpHandlerMono 和 IHttpHandler
【发布时间】:2011-11-16 21:05:21
【问题描述】:

我想使用 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 中,我可以创建一个 index.aspx,它可以根据 .Net-Framework 完美地解析和执行,但似乎该处理程序不包含在 mod_mono-Framework 中。

是使用真正在 Mono 中实现的 IHttpHandler,还是应该使用另一种方法将所有请求收集到某个主机和/或虚拟目录。

【问题讨论】:

    标签: asp.net .net apache mono mod-mono


    【解决方案1】:

    HTTP 处理程序和模块在 Mono 中运行良好。

    您的问题是您的 Web.config 文件使用特定于 IIS 的“集成管道”模式的语法。此模式在 Apache/mod_mono 下不存在。因此,除了现有的 &lt;system.webServer/handlers&gt; 部分之外,您必须使用旧语法(即“经典管道”模式的语法)并提供 &lt;system.web/httpHandlers&gt; 部分。

    请参阅此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>
    

    &lt;validation ...&gt; 标记非常重要:如果您忘记它,IIS 会抛出错误并抱怨在集成管道上下文中使用了未经授权的部分。

    下一步是指示 Apache 服务器将文件处理转移到 mod_mono,如下所示:

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

    AddType application/x-asp-net .rss 这一行是重要的。请参阅此行中Web.config 中的path="*.rss".rss 扩展之间的关系。 如果要处理所有扩展,如您的示例 (path="*"),则必须将行 AddType application/x-asp-net .rss 替换为 ForceType application/x-asp-net

    【讨论】:

    • Cedric,感谢您的帮助。我有一个类似的单声道网络托管问题,涉及静态变量的生命周期,我希望您能在stackoverflow.com/questions/13480328/… 上输入
    • 完美运行!谢谢你。我在独立(不是 mod_mono)模式下使用 XSP,所以在那种情况下不需要 apache 配置,但 web.config 更改正是需要的。
    • 您如何获取 Mono.WebServer 的 web.config 中支持或不支持的信息?
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多