1

我面临一个似乎与配置有关的问题。

我有一个基于 MonoRail 的 web 应用程序,我们利用 MonoRail 的路由功能。在应用程序启动后的第一个请求中,路由未初始化。为了避免这种情况,我在 Application_OnError() 中有以下代码:

public virtual void Application_OnError()
{
    if ( // identified as routing error )
    Server.TransferRequest( Context.Request.RawUrl, false );
    return;
}

问题在于,在我们的开发服务器(运行服务器 2008 R2,带有 IIS 7.5 和 .NET 3.5)上返回一个没有标题的空白页,但在我的工作站(运行 win7、IIS 7.5 和 .NET 3.5)上它工作正常。

这可能是什么原因?如果 Application_OnError() 中的代码抛出异常,预期的输出是什么?

我已经验证了以下内容:

  • 访问日志显示一个条目,我不确定 TransferRequest 是否会在成功调用时显示为第二个条目
  • 该应用程序实际上根据我的内部日志做了一些工作,并且由于后续请求完美无缺(因为路由将处于活动状态),因此它不会死亡

任何关于寻找什么的提示将不胜感激!

4

4 回答 4

1

我认为有一个 throw 错误,但您看不到它,因为您的页面已经准备好出现其他错误,您需要以这种方式捕获它。之后你可以找到真正的问题,因为从我在 TransferRequest 中的检查中可以有很多人认为会给出错误。

public virtual void Application_OnError()
{
    if ( identified as routing error )
    {
        try
        {    
            Server.TransferRequest( Context.Request.RawUrl, false );
        }
        catch(Exception x)    
        {
            LogTheError(x.ToString());
        }
    }

    return;
}
于 2010-07-01T06:45:00.303 回答
1

服务器安装上的应用程序池是否配置为使用集成管道?它需要为了Server.TransferRequest工作。

来自 MSDN 文档:

在 IIS 7.0 中以集成管道模式运行时使用此方法,以允许在使用正确的请求上下文执行目标请求时将请求处理从一种资源类型转移到另一种资源类型。

于 2010-06-24T14:05:13.160 回答
0

您可能需要在 Application_OnStart() 期间设置您的路由,以便为您的第一个请求及时注册路由。

http://www.castleproject.org/monorail/documentation/trunk/advanced/routing.html
http://www.kenegozi.com/blog/2009/02/10/monorail-routing-and-the-homepage-routing -rule.aspx

你现在在哪里注册路线?

其他建议

以下是关于 CompleteRequest 和 URL 重写的更多内容: http:
//msmvps.com/blogs/luisabreu/archive/2007/10/09/are-you-using-the-new-transferrequest.aspx
http:/ /support.microsoft.com/kb/817036

一个建议是尝试 Request.Redirect 。

于 2010-06-28T19:05:01.160 回答
0

您应该研究的一件事是 Server.ClearError()。Win 7 和 Server 2008 有一些重大变化,包括管道和错误。

http://mvolo.com/blogs/serverside/archive/2007/12/08/IIS-7.0-Breaking-Changes-ASP.NET-2.0-applications-Integrated-mode.aspx

查看列表中的第 21 项。

不确定这是否是您的问题,但似乎值得检查。

于 2010-07-01T08:31:49.043 回答