2010-05-06 21 views
4

我試過用幾種不同的方式詢問這個問題,但讓我們再來看看它(因爲我還沒有收到答案,這使我瘋狂!)經典的ASP和MVC並行,不同的項目?

我有一個非常大的經典ASP 3.0應用程序(〜350K行),我想開始遷移到ASP.NET MVC。我希望將舊的ASP文件保存在與MVC內容不同的項目中。

想法如何調試這些?我應該只將文件轉儲到同一個文件夾中,並創建兩個不同的項目(一個WAP和一個MVC應用程序),它們引用每個項目所需的相關文件和文件夾?這應該可以,但是有沒有人有更好的主意?我需要能夠單獨遷移小部分應用程序,因爲這可能需要一年或兩年才能完成。

+0

你試圖將應用程序轉換集體到ASP.NET MVC或只是在時間MVC將一塊「擁抱和擴展」的舊的應用程序? – 2010-05-06 16:12:03

+0

「擁抱與延伸」可能最能描述我所追求的。例如,我們在/ forum文件夾中有一個ASP論壇。我想在MVC項目中創建一個名爲「forum」的區域,並從ASP網站中刪除相同的文件夾,並讓MVC論壇接管。有了這樣大小的網站,一次只能做到這一點。 – 2010-05-06 16:15:08

回答

3

免責聲明這是從我的頭頂,我從來沒有這樣做,可能是沒譜的方式:

的初步審查之後,我想你已經3個交替討論如下:

  1. 合併成一個應用程序,
  2. 有一個應用程序,應用程序根,另一個爲「子」應用
  3. 複製合併成編譯後一個應用程序(這可能不是正錫布爾赫丁)

1)合併成1個應用程序爲您提供了以下好處,比較簡單,你需要修改的Global.asax - 設置你的MVC路線,國際奧委會等 - 的HttpApplication,會話和安全(假設形式基於)將會正常工作。

有一個有點「輕微」的問題,那就是共享tempData,如果你可以在你的頁面上實例化一個SessionStateTempDataProvider(Init加載,卸載以保存類似於視圖狀態),那麼你應該能夠創建,似乎找到了博客,但幾個月前認爲它是Steve Sanderson

您的單元測試/代碼覆蓋率將很難跟蹤,您可能需要考慮如何管理它,這是一個完全不同的討論。

2)使用此選項,您可以將應用程序與新的繼承問題完全分開。如果您的應用程序使用它,HttpApplication。*可能會導致問題,因爲它們會引用不同的文件夾,上下文等,但忽略那些說明您很高興它們是不同的應用程序

下一個大問題是讓Sessions正常工作,現在這可能證明是非常棘手的,如果session處於正常狀態,那麼每個應用程序將不會看到其他應用程序會話,但是如果您使用SQL或自定義緩存服務器進行會話狀態,則應該能夠「破解」過程或引用/配置,並在應用程序之間共享會話狀態 - 最糟糕的情況是,您需要編寫自己的會話提供程序,(我從來沒有寫過一個,所以不知道這將是多麼困難,或者它是否可行)。

下一個問題是表單身份驗證,您可以執行標準單一登錄並確保MachineKey驗證和解密密鑰在配置中相同。臨時數據將與選項1相同。對我來說,這聽起來像太多的事情要改變,可行... ...

3)假設你把你的asp.net網站,並添加引用MVC和在默認的全球ASAX添加路由等應用程序仍然應該建立乾淨,但扔路由錯誤尋找/控制器/動作時/ id類型的路由,所以你可能需要檢查這個。

假設工作的,你可以「潛在」做兩個應用程序的XCOPY合併(即從MVC應用程序中的所有文件複製到asp.net應用程序前展開)。我知道你可以通過創建一個合併了兩個應用程序的大項目來實現這一點,但這種方式在構建過程的後期階段將代碼合併在一起。 (簽字的議會,想起來很麻煩)。再次,你需要在臨時數據發佈工作...

我還沒有觸及URL重寫等許多方面,你可能需要考慮,並請注意,與每種方法明顯的缺點您可能需要考慮。

綜上所述我認爲你最大的問題將是一個HttpApplication,從MVC端會話和TempData的,觀看來自asp.net端的狀態。網址重寫,認證應該更容易。

而正如阿甘正在說的那樣,「那是我的想法」。

+0

感謝您的詳細回覆。實際上,我將一個經典的ASP應用程序(而不是.net)與MVC結合起來,但我認爲在這裏提到的所有內容仍然適用。 – 2010-05-07 15:49:38

+0

我們正在嘗試使用ASP.NET MVC4做同樣的事情,但是到目前爲止還沒有運氣,這些想法並沒有爲我們工作。我們需要讓他們進入同一個應用程序域,以便他們可以看到相同的Cookie。獎勵積分可以指向我一些有用的信息的任何人。謝謝你,彼得 – 2014-02-07 16:04:18

+0

看一看我回答了關於這裏http://stackoverflow.com/questions/2797412/single-sign-on-asp-net-mvc/2798169#2798169 – 2014-02-28 00:38:26

4

經過大量的研究,我發現保持這些項目從IIS的角度來看合併的一個好方法,但在Visual Studio中的單獨項目中,是在同一個文件夾中創建項目,但保留每個文件在他們自己的.csproj文件中。

通過這種方式,它可以單獨或作爲一個解決方案發布他們,我可以很容易地通過查看解決方案資源管理器中哪些文件屬於每個項目出來。當項目從傳統的ASP(再次,不是.NET)轉移到MVC時,我將ASP項目中的舊文件夾從name重命名爲delete-me-name,並在MVC項目中創建相應的區域。

到目前爲止,這工作得很好。其他唯一的變化是增加了一個路線忽略global.asx.cs文件規則忽略.asp文件:

   routes.IgnoreRoute("{resource}.asp/{*pathInfo}"); 

到目前爲止,一切似乎合作得非常好。

+0

分享餅乾的問題,你是如何辦理交接/經典asp和asp.net mvc之間的Session分享? – 2011-05-19 17:22:44

+0

我們不使用會話。如果你有多臺服務器,它永遠不會結束。 – 2013-05-23 23:02:59