Server.TransferRequest返回特定服务器上的空白页面

时间:2010-06-17 09:30:31

标签: asp.net error-handling iis-7.5 castle-monorail

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

我有一个基于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 个答案:

答案 0 :(得分:1)

Server安装上的应用程序池是否配置为使用集成管道?它需要Server.TransferRequest才能正常工作。

来自MSDN文档:

  

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

答案 1 :(得分:1)

我认为有一个抛出错误,但您没有看到它,因为您的网页已准备好处理其他一些错误并且您需要以那种方式捕获。之后你就可以找到真正的问题了,因为从我在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;
}

答案 2 :(得分: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。

答案 3 :(得分: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项。

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