是這樣的
今天架站後預覽時遇到一個問題,可是它顯示得太簡單實在不知道該怎麼處理
所以我想先從登入時查看有沒有連接到資料庫
我在我的coontroller那裡加個try catch,不過還是沒顯示詳細的錯誤
想請問我該如何做才能確定問題在哪裡?
這是我登入時用的controller
[AllowAnonymous]
[HttpGet]
public ActionResult Login(string cid)
{
LoginViewModel model = new LoginViewModel();
try
{
if (String.IsNullOrWhiteSpace(cid))
{
model.CID = ConfigurationManager.AppSettings["CID"];
}
else
{
model.CID = cid;
}
CustomerService cSvc = new CustomerService();
List<CUSTOMER> customers = cSvc.FindCustomers();
model.Customers = customers;
}
catch (Exception ex)
{
throw ex;
}
return View(model);
}
我的資料庫是oracle搭配EF
你不會使用IDE嗎?....
中斷點下在throw ex;
這行
然後執行到這邊
滑鼠指到ex看錯誤訊息.....
Homura大大回了之後我發現...
在catch裡面throw是什麼情況...
如果正式上線通常是會記錄Log,
如果是直接偵錯的話,
可以考慮這樣
catch (Exception ex)
{
string text = ex.ToString();
}
然後中斷點下在 } 的地方...
text通常會有很多行,
最好貼到文字編輯器(我都直接貼 純文字文件)觀察問題點.
我聽其他同事說我們有做一個actionlog,如果有問題
好像那邊會有紀錄,不過剛剛去看什麼都沒有
不知道您對oracle有沒有稍微研究
https://ithelp.ithome.com.tw/questions/10193407
不知道我的連線字串有沒有錯誤
Oracle沒用過,
所以之前才沒有回,
不過如果沒有記到Log,
應該是哪邊出錯了,
不過你在本機沒辦法測試嗎?
通常應該都要在本機測試過再上線吧...
本機沒有這問題,所以才覺得麻煩,還是感謝您的回答
如果是發行狀態就是小魚大的ex.toString()寫進log看了@@
是的,
我們一般都是把ex.ToString()寫進Log,
順便加一些時間跟其他我們想要紀錄的資訊.
Inner Exception是透過Exception.InnerException來取得。如果發現這個訊息,就順便把他也寫進Log,不然你還是看不到祥細的錯誤。
也是,
應該有一個大的try catch包在外面,
所以才會用throw,
也可以在那個地方寫Log...
能否再請教一下
如果有看到登入畫面,但是帳號密碼輸入後卻跑出
The underlying provider failed on Open.
這可能是哪方面的問題?
1.把螢幕關掉
2.把眼睛閉上
3.假的
我覺得你們抓Bug的機制有問題,
先把我們之前在討論的Log寫出來再說...
了解,我問過其他人,我們這裡面有安裝NLOG,不過沒人用......
我試著把它弄出來看看
catch (Exception ex)
{
string text = ex.ToString();
FileStream fs = new FileStream(Server.MapPath("~/Msg.txt"), FileMode.OpenOrCreate);
//獲得位元組陣列
byte[] data1 = System.Text.Encoding.Default.GetBytes(text);
//開始寫入
fs.Write(data1, 0, data1.Length);
//清空緩衝區、關閉流
fs.Flush();
fs.Close();
}
最後看到了
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> Oracle.ManagedDataAccess.Client.OracleException: Connection request timed out