2010-06-17 35 views
1

我正面臨一個似乎與配置有關的問題。Server.TransferRequest返回特定服務器上的空白頁

我有一個基於MonoRail的web應用程序,我們利用MonoRail的路由功能。在應用程序啓動後的第一個請求中,路由不會被初始化。爲了規避這個問題,我有Application_OnError下面的代碼():

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

問題beeing我們的開發服務器(運行服務器2008 R2,與IIS 7.5和.NET 3.5)無頭返回一個空白頁,但在我的工作站上(運行win7,IIS 7.5和.NET 3.5),它工作正常。

這可能是什麼原因造成的?如果Application_OnError()中的代碼引發異常,那麼期望的輸出是什麼?

我已經驗證了以下內容:

  • 的訪問日誌顯示一個項目,我不知道是否成功調用時
  • 的應用做一些實際的一個TransferRequest將顯示爲第二個條目根據我的內部日誌工作,並且它不會因爲後續請求完美地工作(因爲路由將被激活)

任何提示什麼尋找將不勝感激!

回答

1

服務器安裝上的應用程序池是否配置爲使用集成管道?它需要爲Server.TransferRequest工作。

從MSDN文檔:

與IIS 7.0集成管道模式下運行時,此方法用於以允許同時執行與所述目標請求從一個資源類型轉移到另一個請求處理正確的請求環境。

+0

不錯的建議,但應用程序池設置爲集成,所以不是這樣,對不起。 – jishi 2010-06-29 09:28:24

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代替。

+0

我今天在Application_OnStart()中註冊了他們,我認爲第一個請求中有一個glith觸發應用程序啓動,其中RoutingModuleEx實際上是在應用程序啓動之前調用的(因此不會重寫第一個請求)。我認爲它只能在web.config中定義路由時正常工作,而不是在代碼中。 – jishi 2010-06-29 09:26:26

+0

我真的不記得我們爲什麼使用Server.TransferRequest,但我認爲這是爲了讓訪問者透明,但仍然通過所有可用的模塊引發請求。一個Response.Redirect可能會工作,但這應該工作,因爲它「適用於我的機器」 – jishi 2010-06-30 14:02:25

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; 
} 
+0

我會試試這個,謝謝! – jishi 2010-07-01 09:48:23

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。

不知道這是你的問題,但它似乎可能是值得檢查的東西。

+0

嗯,但我的開發機器是贏7(其工作)和舞臺服務器是2008 R2(失敗)。我認爲這些版本應該幾乎完全相同? – jishi 2010-07-01 09:46:24

+0

我猜測2008 R2和Win 7之間可能沒有發現有變化。嘗試2008年的機器(非R2)可能會很有趣,看看你是否仍然有這個問題。我猜你可能不會。 – spinon 2010-07-01 10:02:03