請教各位先進,目前新寫了一個MVC專案部份功能,第一次想要先上IIS跑看看,途中遇到了一些問題,透過google大神有解決了一些,目前卡在一關無法解決,所以上來請教一下各位先進的經驗~
就之前開發Web Form的經驗,只要開發好,把程式碼丟到IIS上執行,基本上就可以運作,不會有太多問題產生~
這次第一次丟一個MVC的專案,先解釋一下專案的目錄結構:
目錄結構如圖1在最外層的Controllers寫了login的功能,當user使用帳密login後會導入到Area Users的工作區域運作~
建置全新的伺服器環境:
VMware
Windows Server 2012
IIS 8
連結至區網(我自己的電腦)SQL Server 2012
專案程式碼使用本機(我自己的電腦)Visual Studio 2015開發
問題描述:當專案丟上IIS後遇到一些問題,有透過google解決,目前可看到專案的首頁,測試登入功能,卻在登入後遇到如圖2,HTTP 錯誤 404.0 - Not Found,但是專案功能在VS上測試都是可以正常運作的,於是測試另外一個功能,一樣是寫在目錄結構最外層的註冊功能,測試可以註冊成功,並正確寫入資料庫。
問題:不知為何在登入後導入Area Users的工作區域會發生HTTP 錯誤 404.0 - Not Found,但在VS的工作環境下都是可以正常運作的,這樣的問題不知道是那個環節出問題,不知道該如何排除。
圖1專案目錄結構
圖2登入後錯誤畫面
Submission屬於網站
而非應用程式
,您必須直接將Submission新增為站台才行~
感謝指教,目前改為站台執行模式測試可正常執行~
我之前的web form都是建置在應用程式裡
請問該怎麼看,什麼樣的東西必須建置在站台,什麼樣的東西必須建置在網站呢?
WebForm有分 網站 跟 專案,
你用的是不是 網站?
基本上那是比較不安全的方式.
leo226,基本上您可以把一個.NET專案當成一個網站,即便像是Web Form包含多個aspx,它也會被放在同一個專案當中並且共用一份設定檔(Web.config)
小魚對,之前開發的WebForm是用網站建置,所以架在IIS下是用應用程式架設。
之後也有開發一個WebForm是用專案建置,但一樣是架在IIS下的應用程式還是一樣可以正常執行。
所以這次開發的MVC專案,一樣按照之前IIS建置的經驗,把它建置在應用程式裡頭了。
因為想要共用80 port的關係,所以都建置在應用程式底下。
如果是建置站台,那每個站台都要編一個port來使用,如果有多個站台,那就會有多個port,請問先進們也都是這樣子建置的嗎?
是的,基本上就是一套系統對應一個站台,一個站台對應一組ip+port,如果您只有一個ip,要架多個站台多就是要改多個port。
不過也不是沒有辦法啦XDDD,例如這篇 多站台共用 IIS 80 Port
己解決,感謝
你不是建在原先的Controllers資料夾嗎?
那可能會跟Router有關係.
如果初學建議是不是先用預設的方式?
登入與註冊的功能是寫在原先的Controllers資料夾,就是目前是想說登入前的功能寫在預設的Controller,登入後的功能寫在Area裡,不知道這樣可不可以,我想說在VS裡運作都沒問題,應該就不會有問題了,沒想到上IIS後還會遇到這樣的問題~
目前Router的設定只有下面這一條。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index2", id = UrlParameter.Optional }//即使網址中沒有id也會預設通過
,
namespaces: new[] { "Submission1.Controllers" }//限制只有命名空間相同的才會比對成功
).DataTokens["UseNamespaceFallback"] = false;
登入後會重新導向至area = "Users"的Controllers裡面運作
//重新導向首頁頁面
return RedirectToAction("Index", "Conference", new { area = "Users" });
測試註冊功能,註冊後重新導向的程式碼如下,一樣保留在最外層Controllers運作,這樣就可以正常運作。
//重新導向頁面
return RedirectToAction("RegisterResult");
看圖2錯誤訊息好像是在第一步找最外層Login的function就找不到了,好像不是有找到登入的function,而後在重新導向時發生的錯誤,不知道是不是這樣來理解?
實體路徑 C:\inetpub\wwwroot\Member\Login
他寫的是找不到Member\Login
我在VS上運作的註冊功能網址如下
http://localhost:4875/Member/Register
掛在IIS上運作的註冊功能網址如下
http://localhost/Submission/Member/Register
會多了一個Submission,不知道這樣會不會有影響,目前猜測可能是這個原因影響的,但不知道該如何修改調整?
是修改Router嗎?
Member\Login就是按下登入按鈕要找的Controller\method如果是這個找不到,那為什麼在同一個Controllers下的註冊Register就可以被找到?
按下註冊按鈕會找Member\Register,此註冊功能是可以被找到,並正常執行的~
喔喔,
問題應該是出在你把Submission放在Default了,
你應該要另外新增一個站台.