今天有園友問我一個問題,問題的大致意思就是新建了一個項目,在vs中調試都可以正常,但是在iis訪問就會出現各種問題。我個人認為這個問題都很容易解決,因為園友和我離的挺遠,只能通過QQ視頻來操作,但是我發現這種方式的溝通確實不太方便。索性把這些問題整理一下,這樣更容易的可以處理方法說明清楚。
因為我目前的項目沒有這個問題存在,所以我只能是新建一個簡單的項目,然後在本地操作,盡量讓這個問題出現,也因為我從來沒有整理過這方面額問題,現在整理一下,然後再把我遇到的一些問題整理一下,說明一下如何解決這類問題。如果你還有一些問題出現,但是我現在沒有想到,那麼請你給我留言,我來把這些問題再做整理。
首先說第一個問題,數據庫訪問出現的問題。恐怕這個是最普遍的問題了。因為這個操作實在很簡單,具體的細節我就不細說了,大家一眼就會明白。
首先我們新建了一個Web項目,在項目中添加了一個頁面叫做test.aspx,其中添加了一個按鈕,當點擊了這個按鈕的時候會連接數據庫把數據庫中的數據提取出來顯示在界面上的gridView上。
復制代碼 代碼如下:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=DbLog;Integrated Security=True");
SqlCommand cmd = conn.CreateCommand();
try
{
string sql = "select top 10 * from log";
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
catch (Exception ex)
{
string errmsg = ex.Message;
Response.Write(ex.Message);
}
}
如果連接數據庫出現異常的話,我們把異常信息直接打印出來。現在我們來看結果。
上面的這個圖是在vs中通過F5運行之後得到的結果,很明顯 顯示結果是正確的,現在我們來看一下在iis下的顯示結果。什麼,你不知道怎麼放到IIS中訪問,那麼好吧,我簡略的敘述一下,在IIS中新建一個虛擬目錄或者網站,然後把項目的路徑填到裡面就可以了。
在IIS中訪問出現了問題,顯示的不是數據庫中的數據,而是在異常信息中顯示的異常信息。這是什麼原因呢?看異常信息提示,打開數據庫失敗,這是為什麼呢?從這個原因我們可以考慮幾個方面。
2.如果不是數據庫的配置問題,可能使我們打開數據庫的數據庫密碼不正確。這個也要檢查一下,打開數據庫的服務器是否正確,數據庫名是否正確,因為我們這個試驗是通過Windows 驗證訪問的,所以不存在密碼錯誤的問題。
3.就是權限問題。這個應該是最主要的問題存在,會令一些人瘋狂的地方了。其實就是我們做項目的時候控制用戶訪問的道理是一樣的,數據庫禁止該用戶訪問。
既然說道權限問題,那麼我們就要說一下,IIS運行在哪個用戶下呢?我們以管理員登陸操作系統的奧,還是會出現錯誤。其實IIS運行在一個叫做iis_user的用戶下,可能不同的IIS版本下這個名稱會有所不同,Network_services 在IIS中有時也需要,但是在IIS7 就是這個用戶,因為我安裝的就是IIS7.如果我們用的是Server 2003 系統,那麼在IIS上可以直接設置權限。因為我在公司用的就是server 2003,所以比較清楚。
首先上來就報錯了。由於權限不足,那好,我們就給他增加權限。選擇項目文件夾,添加iis_users用戶,然後給他特定的權限就可以正常了。
可能有的園友要罵我了,怎麼沒有看到那個數據庫無法登錄的錯誤,我只能說一句抱歉了,因為我確實沒有模擬出來那個錯誤。因為我用的是Windows 7系統,其實在出現配置錯誤的時候我預想的應該是出現哪個數據庫連接登錄錯誤。等我模擬到那個登錄錯誤的時候再拿出來。但是按照設置權限應該可以解決所有的權限錯誤問題。
總結一下,iis登錄錯誤的問題很基本,只要我們善用搜索引擎,一般這類問題很容易解決。這篇播客是常識貼,知道的話很容易,但是如果找不到原因,也挺煩人的,故提出來大家一起分享。