代码之家  ›  专栏  ›  技术社区  ›  jishi

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

  •  1
  • jishi  · 技术社区  · 16 年前

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

    我有一个基于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 回复  |  直到 16 年前
        1
  •  1
  •   Roman    16 年前

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

    从MSDN文档:

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

        2
  •  1
  •   Aristos    16 年前

    我认为有一个抛出错误,但您没有看到,因为您的页面已经准备好了,可以处理其他错误 你需要这样抓住它 . 之后你就可以发现真正的问题了,因为从我签入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;
    }
    
        3
  •  0
  •   Even Mien    16 年前

    您可能需要在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

    你现在在哪里登记路线?

    其他建议

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

    一个建议是尝试请求。改为重定向。

        4
  •  0
  •   spinon    16 年前

    您应该研究的一件事是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项。

    不确定这是否是你的问题,但它似乎是值得检查的东西。

    推荐文章