今天有园友问我一个问题,问题的大致意思就是新建了一个项目,在vs中调试都可以正常,但是在iis访问就会出现各种问题。我个人认为这个问题都很容易解决,因为园友和我离的挺远,只能通过QQ视频来操作,但是我发现这种方式的沟通确实不太方便。索性把这些问题整理一下,这样更容易的可以处理方法说明清楚。
因为我目前的项目没有这个问题存在,所以我只能是新建一个简单的项目,然后在本地操作,尽量让这个问题出现,也因为我从来没有整理过这方面额问题,现在整理一下,然后再把我遇到的一些问题整理一下,说明一下如何解决这类问题。如果你还有一些问题出现,但是我现在没有想到,那么请你给我留言,我来把这些问题再做整理。
首先说第一个问题,数据库访问出现的问题。恐怕这个是最普遍的问题了。因为这个操作实在很简单,具体的细节我就不细说了,大家一眼就会明白。
首先我们新建了一个Web项目,在项目中添加了一个页面叫做test.aspx,其中添加了一个按钮,当点击了这个按钮的时候会连接数据库把数据库中的数据提取出来显示在界面上的gridView上。
1 protected void Button1_Click(object sender, EventArgs e) 2 { 3 SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=DbLog;Integrated Security=True"); 4 SqlCommand cmd = conn.CreateCommand(); 5 try 6 { 7 string sql = "select top 10 * from log"; 8 SqlDataAdapter sda = new SqlDataAdapter(sql, conn); 9 DataTable dt = new DataTable(); 10 sda.Fill(dt); 11 12 GridView1.DataSource = dt; 13 GridView1.DataBind(); 14 } 15 catch (Exception ex) 16 { 17 string errmsg = ex.Message; 18 Response.Write(ex.Message); 19 } 20 }
如果连接数据库出现异常的话,我们把异常信息直接打印出来。现在我们来看结果。
上面的这个图是在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登录错误的问题很基本,只要我们善用搜索引擎,一般这类问题很容易解决。这篇播客是常识贴,知道的话很容易,但是如果找不到原因,也挺烦人的,故提出来大家一起分享。
我又回来了,回到了技术最前线,