作者:veter 来源:博客园   酷勤网收集 2008-06-10

摘要
  问题如下:1:访问静态页面无任何问题,但是.aspx就不行,总是报一个服务器出错。但具体错误又没有提示;2:无法加载DLL文件;3:首页登录图片显示不完整。分析如下:1:IIS7会不会和IIS6一样,默认编译语言是VB?2:应用程序配置文件的存放目录是不是不正确?

        写之前,犹豫了很长时间,不懂这个初级分析会不会引起园友的批判,说实在,在博客园发贴,真有点诚惶诚恐的感觉,很怕对不住大家。

        前段时间花了一个星期给客户做了一个OA系统,用的是Win2008的系统,VS2008+Access数据库做的,本来客户已有一个ASP的主机,因为考虑到现在本本上确实没装有其它的开发环境了,就直接上.net3.5了。当做好想当然的直接上传到服务器,不想总是运行不起来。

总结了一下,问题如下:

1:访问静态页面无任何问题,但是.aspx就不行,总是报一个服务器出错。但具体错误又没有提示。

2:无法加载DLL文件

3:首页登录图片显示不完整。

        刚开始一直在和客服联系,以为是他们的服务器不支持,因为我在本地部署是没有任何问题的。后来他们说服务器是没有问题的,应该是程序的问题。

然后我试着在本地IIS新建一个虚拟目录来运行,果然也是不行的,报出的错误是一样的。新建网站是可以直接运行的。

        分析如下:

1:IIS7会不会和IIS6一样,默认编译语言是VB?

2:应用程序配置文件的存放目录是不是不正确?

3:网站编译后的BIN目录是不是没有被页面访问到?

4:页面之间的访问路径是否正确?

5:数据库文件是否有执行全部权限?

 

带着以上问题,我一个个的去查找。

         问题1:找到服务管理器下面的IIS的默认网站,切换到“功能视图--.net编译项”,打开一看,果然默认编译语言是VB,好,第一个问题搞定。

         问题2:配置文件改放到默认网站根目录下面,把原来IIS自带的配置文件覆盖掉,再运行,好,可以访问到登陆页面了,但是登陆页面的图片总是显示不出来,想想应该是路径问题,接着将目录IMAGE也放到根目录,刷新后图片显示出来了,但是验证码没有,怪了。为什么呢?

再次分析,因为验证码是用一个.aspx页面生成一个流后写入到Cookie中的,会不会是也是路径问题?接着把验证码页面再放到根目录下,果然OK。

        问题3:关于DLL文件执行权限问题,其实DLL文件是生成到了BIN目录下面,所以应该是这个目录的执行权限问题了,接着在IIS中打开此目录属性,找到一个叫做:IIS_IUSER的用户,编辑此用户权限,使其拥有对BIN的全部权限。再次运行,OK,访问到了,但是数据库又出错,找不到可用的连接。

真是怪了,为什么呢?明明数据库就是和SERVER层放在一起的呀!而且页面可以访问到数据库呀,为什么SERVER不行呢?我们先来分析问题4.

        问题4:我的首页上有一颗树,在生成树时,我用了硬编码方式(时间紧),导致了导航的URL总是自动上"~/",  在发布时没注意到这个问题,所以页面间访问时,总是说找不到路径。把这个"~/",去掉后问题解决,其实这是小问题了,个人没注意到。

        问题5:数据库文件问题,终于来到这个重头了。其实不懂是不是IIS中虚拟目录的问题,要解决这个问题,只要你在网站根目录下建好一个叫做App_Data的目录,再将你的ACCESS数据库放进去就差不多了,只所以说差不多,因为还要再做一件事,和BIN目录一样,IIS_IUSER的用户对这个目录也是没有写入权限的,你查询数据没问题,但是你要写入,不好意思,出错。

        问题到这里解决得差不多了,最后按照解决问题的步骤将网站放到服务器上,一运行,还是不行,咦,真是怪事年年有,今年特别多啊!

心想死马当做活马医吧,再次把BIN目录COPY到虚拟目录下,注意,只是COPY,根目录下还是有一个BIN目录的,虚拟目录下的配置文件删除,再次访问登陆页面,输入用户名密码,成功!再试一下其它的操作,一切OK!

        直到这一步,距系统完成已过去了三天,网上广发贴子,无人回应,百度GOOGLE找不到任何帮助,头真是大。

来自:浅谈IIS7中部署.net3.5的网站问题

评论:

2008-06-07 16:45 | 梁逸晨      

给别人做事,能上2.0就不错了。
现在用3.5还不太现实。

至于问题1:只要你ASPX文件指定了LANGUAGE属性,服务器设置什么语言编译都是次要的(极少数的人为强制设置system.config的情况例外)

如果不是自己的服务器,最好不要再2008上面使用ACCESS,因为你无法确定别人的系统是32位还是64位,如果是64位的话,又要经过很复杂的设置才能执行ACCESS文件。
2008-06-07 18:04 | benbenxx
"~/" 要加上runat="server"就可以了。如果没有runat="server" 那就去掉“~”
"~/" 表示根目录!

分类: .NET技术 Windows技术

上一篇:Boo:Visual Studio中的又一头等语言   下一篇:语言专有的类库应该放到.NET里吗?