iT邦幫忙

0

ASP.NET MVC IIS程式碼上線問題

請教各位先進,目前新寫了一個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登入後錯誤畫面

2 個回答

1
YoChen
iT邦研究生 4 級 ‧ 2019-11-04 15:20:19
最佳解答

Submission屬於網站而非應用程式,您必須直接將Submission新增為站台才行~

看更多先前的回應...收起先前的回應...
leo226 iT邦新手 4 級 ‧ 2019-11-04 16:10:14 檢舉

感謝指教,目前改為站台執行模式測試可正常執行~
我之前的web form都是建置在應用程式裡
請問該怎麼看,什麼樣的東西必須建置在站台,什麼樣的東西必須建置在網站呢?

小魚 iT邦大師 1 級 ‧ 2019-11-04 16:13:44 檢舉

WebForm有分 網站 跟 專案,
你用的是不是 網站?
基本上那是比較不安全的方式.

YoChen iT邦研究生 4 級 ‧ 2019-11-04 16:23:17 檢舉

leo226,基本上您可以把一個.NET專案當成一個網站,即便像是Web Form包含多個aspx,它也會被放在同一個專案當中並且共用一份設定檔(Web.config)

leo226 iT邦新手 4 級 ‧ 2019-11-04 16:48:12 檢舉

小魚對,之前開發的WebForm是用網站建置,所以架在IIS下是用應用程式架設。
之後也有開發一個WebForm是用專案建置,但一樣是架在IIS下的應用程式還是一樣可以正常執行。
所以這次開發的MVC專案,一樣按照之前IIS建置的經驗,把它建置在應用程式裡頭了。
因為想要共用80 port的關係,所以都建置在應用程式底下。
如果是建置站台,那每個站台都要編一個port來使用,如果有多個站台,那就會有多個port,請問先進們也都是這樣子建置的嗎?

YoChen iT邦研究生 4 級 ‧ 2019-11-04 17:37:29 檢舉

是的,基本上就是一套系統對應一個站台,一個站台對應一組ip+port,如果您只有一個ip,要架多個站台多就是要改多個port。
不過也不是沒有辦法啦XDDD,例如這篇 多站台共用 IIS 80 Port

leo226 iT邦新手 4 級 ‧ 2019-11-05 16:58:38 檢舉

己解決,感謝

0
小魚
iT邦大師 1 級 ‧ 2019-11-04 11:40:24

你不是建在原先的Controllers資料夾嗎?
那可能會跟Router有關係.

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-11-04 11:47:28 檢舉

如果初學建議是不是先用預設的方式?

leo226 iT邦新手 4 級 ‧ 2019-11-04 13:46:26 檢舉

登入與註冊的功能是寫在原先的Controllers資料夾,就是目前是想說登入前的功能寫在預設的Controller,登入後的功能寫在Area裡,不知道這樣可不可以,我想說在VS裡運作都沒問題,應該就不會有問題了,沒想到上IIS後還會遇到這樣的問題~

leo226 iT邦新手 4 級 ‧ 2019-11-04 13:57:21 檢舉

目前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");
leo226 iT邦新手 4 級 ‧ 2019-11-04 14:20:51 檢舉

看圖2錯誤訊息好像是在第一步找最外層Login的function就找不到了,好像不是有找到登入的function,而後在重新導向時發生的錯誤,不知道是不是這樣來理解?

實體路徑 C:\inetpub\wwwroot\Member\Login
小魚 iT邦大師 1 級 ‧ 2019-11-04 14:23:53 檢舉

他寫的是找不到Member\Login

leo226 iT邦新手 4 級 ‧ 2019-11-04 14:37:18 檢舉

我在VS上運作的註冊功能網址如下

http://localhost:4875/Member/Register

掛在IIS上運作的註冊功能網址如下

http://localhost/Submission/Member/Register

會多了一個Submission,不知道這樣會不會有影響,目前猜測可能是這個原因影響的,但不知道該如何修改調整?
是修改Router嗎?

leo226 iT邦新手 4 級 ‧ 2019-11-04 14:42:41 檢舉

Member\Login就是按下登入按鈕要找的Controller\method如果是這個找不到,那為什麼在同一個Controllers下的註冊Register就可以被找到?
按下註冊按鈕會找Member\Register,此註冊功能是可以被找到,並正常執行的~

小魚 iT邦大師 1 級 ‧ 2019-11-04 15:46:32 檢舉

喔喔,
問題應該是出在你把Submission放在Default了,
你應該要另外新增一個站台.

leo226 iT邦新手 4 級 ‧ 2019-11-04 16:11:45 檢舉

感謝小魚大師指教,目前改為站台執行模式測試可正常執行~

小魚 iT邦大師 1 級 ‧ 2019-11-04 16:51:46 檢舉

應該是因為MVC用的是Router,
不像WebForm直接就是檔案,

如果要共用Port的話,
可以試試新增虛擬目錄的方式.
(在站台按右鍵 -> 新增虛擬目錄)
https://ithelp.ithome.com.tw/upload/images/20191104/20105694pPmpTjwtOZ.png

leo226 iT邦新手 4 級 ‧ 2019-11-04 17:01:06 檢舉

好的,感謝大師指教,我再試看看,謝謝~

我要發表回答

立即登入回答