加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

windows2008X64位下IIS7运行ASP网站的方法

(2024-02-07 10:04:03)
标签:

x64位系统下的iis7下

分类: 资源收集

最近在X64位系统下的IIS7下部署asp网站,出现了N多错误,通过查找,也找了N多不同的错误的处理。现把他们整合在一起,以供大家参考


 

 

64位/32位 Win7下配置IIS7.5运行ASP+Access网站的方法

我们做网站的肯定要测试网站我喜欢用最新的系统,Vista 完全版本, windows 7 IIS7,许多地方又完善了许多,但是在配置的时候遇到了问题: 800a0ea9错误.

在微软MSDN论坛找到的解决方法:

http://blogs.msdn.com/david.wang/archive/2005/09/23/HOWTO_Diagnose_one_cause_of_503_Service_Unavailable_on_IIS6.aspx

Changing IIS6 to run W3WP.EXE as 32bit allows the 32bit ISAPI DLLs installed by .NET Framework 1.1 for ASP.NET to load and run inside of it. This is done by running the following commandline:

先用管理员模式运行命令提示符,然后把以下命令粘贴,运行一定要安装IIS的全部管理工具!)

CSCRIPT %SYSTEMDRIVE%\Inetpub\AdminScripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

网上找到的原文:http://hi.baidu.com/wenm/blog/item/3e80db1b817d33f9af5133ba.html

IIS7的安装(iis 7.5 是一样的)

Windows VistaIIS7是默认不安装的,所以在安装完Windows Vista之后如果需要安装IIS7的话,就要自己动手了。安装的步骤为:开始》控制面板》程序》打开或关闭Windows功能》Internet信息服 务。IIS7安装时需要注意的是,如果需要ASPASP.NET等的支持,是需要把功能模块给装上的,默认是不安装的。

控制面板中程序的位置

程序打开或关闭Windows功能的位置

如图,安装IIS7时需要选择要使用的功能模块

(切记!在这里要安装IIS管理工具!把所有勾画上)

IIS7安装完成之后可以在开始菜单的所有程序中看到管理工具,其中有一个“Internet信息服务管理器,如果没有可以按以下步骤添加:开始》右击属性》开始菜单选项卡》自定义》把系统管理工具设置为在所有程序菜单显示或者在所有程序菜单和开始菜单上显示

打开Internet信息服务管理器就可以看到IIS7的主页了

IIS7配置ASP+Access使用环境

默认装完IIS7之后,使用ASP程序会发现提示数据库连接失败,在网上找了找,说是因为MS Jet引擎改变了临时目录的位置,但是又没有对临时的存取权限,导致数据库使用失败。

先要设置应用程序池(Application Pool)Classic .NET AppPool,而不是默认的Default AppPool,可以在网站目录里对每个站点设置,也可以在站点进行单独设置。选择好要设置的站点之后,点右边的基本设置即可调出应用程序池设置对话 框。

然后再给系统盘:\Windows \ServiceProfiles\NetworkService\AppData\Local\Temp”目录添加一个“Authenticated Users”的用户,其中AppData目录是隐藏的,在进入的时候可以直接在地址栏输入路径,或者在文件夹选项里显示隐藏文件。

设置权限步骤:右击Temp文件夹,选择属性》选择安全选项卡》单击 》出来“Temp 的权限对话框,单击添加,在下面的输入对象名称来选择中输入Authenticated Users,确定》返回到“Temp 的权限,将Authenticated Users的权限中的完全控制给勾上,确定》确定。

启用父路径支持

在站点主页上选择“ASP”,然后在行为组中将启用父路径设置为True即可。

至此,完成了Windows VistaIIS7的安装及使用ASP+Access的配置。

传统ASP程序开发者使用IIS7的小提示

至今还有这么多传统ASP (Classic ASP) 应用程序和开发者,真让我感到惊讶。我还记得9697年的时候IIS3问世,我体验了最原始的ASP程序,并为它与ColdFusion相比表现出的惊 人的可编程性赞叹不已。使用传统ASP我建立了许多应用它将成为我记忆中永不褪色的闪光点:)

使用传统ASP编程的开发人员应该对IIS7的几个小变化引起注意。

ASP缺省不安装

重要的事先来如果从XP迁移到Vista / Longhorn Server, 您也许会得到这个错误:

--------------------------------------------------------------------------------------------------------------------

HTTP Error 404.3 - Not Found

Description: The page you are requesting cannot be served because of the Multipurpose Internet Mail Extensions (MIME) map policy that is configured on the Web server. The page you requested has a file name extension that is not recognized, and is not allowed.

--------------------------------------------------------------------------------------------------------------------

这是您没有安装ASP组件时的情形,所以去您安装IIS的地方找到IIS/WWW Services(WWW服务)/Application Development(应用程序开发)/ASP 来安装它。:)

Access 与传统ASP

很多人使用Access作为数据库-因为它小巧,可复制容易处理。我们在Vista IIS7的一个变动就是缺省不使用ASPAccess。本篇我将详细描述这一变化但根本上这是因为应用程序池(Application Pool)缺省不再使用\windows\temp, 而改为应用程序池身份档案(identity's profile)和临时目录。并且因为只有"网络服务"才能向网络服务的临时目录执行写入操作, ASP使用虚拟身份(impersonated identity)访问数据库所以匿名或已认证的ASP应用程序就会中止。如果您在IIS7使用ASP+Access、你大概会看到与以下提示类似的错误信息:

--------------------------------------------------------------------------------------------------------------------

Microsoft JET Database Engine error '80004005'

Unspecified error

--------------------------------------------------------------------------------------------------------------------

回答很简单关闭loadUserProfile, 或者设置temp directory的访问权限以允许写操作这一问题和其它兼容性问题导致我们考虑在Longhorn Server / Vista SP1中取消这一变化.

不过现在您可以在下列措施中任选一项:

这个 appcmd 指令将为缺省应用程序池关闭 loadUserProfile. 假如您的程序运行于不同的应用程序池(AppPool), 就相应改动一下:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools /[name='DefaultAppPool'].processModel.loadUserProfile:false

这条命令将把网络服务的临时目录权限改为可读可写。如果你是以另一个身份来运行程序,那么你还需要将那个身份的临时目录权限给打开:

icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant Users:(CI)(S,WD,AD,X)

icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant "CREATOR OWNER":(OI)(CI)(IO)(F)

脚本错误默认为不在浏览器中显示了

作为安全策略的一部分,我们关闭了ASP的自动在浏览器中显示脚本错误的提示。也就是说一般用户将不会再看到你的语句到底是哪一行出了差错。取而代之的是这个错误提示:

--------------------------------------------------------------------------------------------------------------------

An error occurred on the server when processing the URL. Please contact the system administrator

--------------------------------------------------------------------------------------------------------------------

要想恢复到IIS6的状态也很容易,运行下面命令即可:

%windir%\system32\inetsrv\appcmd set config -section:asp -scriptErrorSentToBrowser:true

或者你可以在窗口界面中找到以下这个选项:

之后你就能看到这样的错误提示信息了:

--------------------------------------------------------------------------------------------------------------------

Microsoft VBScript compilation error '800a03ea'

Syntax error

/test.asp, line 4

Response.Write("I love classic ASP" && foo)

-------------------------------------^

--------------------------------------------------------------------------------------------------------------------

父目录默认是不能访问的

IIS6中我们默认屏蔽了父目录的访问,但是一些从XP升级到Vista的用户显然遇到了麻烦。因为在IIS5.1中,父目录默认是可以访问的。所以如果你使用了http://www.cnblogs.com/../includeFile.inc这样的路径,你就会得到这样的错误提示:

--------------------------------------------------------------------------------------------------------------------

Active Server Pages error 'ASP 0131'

Disallowed Parent Path

/test.asp, line 1

The Include file '../bad.inc' cannot contain '..' to indicate the parent directory.

--------------------------------------------------------------------------------------------------------------------

要想恢复到IIS6的状态也很容易,运行下面命令即可:

%windir%\system32\inetsrv\appcmd set config -section:asp -enableParentPaths:true

或者你可以在窗口界面中找到以下这个选项:

如果你是用IE测试的,去掉高级选项里的显示友好HTTP错误再看看。

IIS管理器-ASP-Debugging Properties--Send Errors to Browser,改为True

最好一步给存放的网页代码的文件夹everyone 的权限就搞定了

 

64位IIS(IIS6/IIS7)上运行Jet.Oledb的设置

由于64位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接。所以用于 Access 和 Excel 数据库的 Microsoft OLE DB Provider for Jet 在 64 位版本中不可用,也就是说,如下两种连接字符串都已经无法正常工作了:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.mappath(db)

"driver=Microsoft Access Driver (*.mdb);DBQ="&Server.MapPath(db)

既然这样,就只能使用一个办法,将IIS的运行环境设置为32位:

IIS6上的做法:

1.命令行键入:

cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

即设置IIS6允许32位程序运行在64位机器上

2.重新注册.net FrameWorks

%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

3.完成之后,应该会看到多出一个32位的asp.net,如下图:

 

将其设置为允许,缺点:这样会使整个IIS上的所有站点都以32位兼容方式运行

IIS7上的做法要简单很多:

应用程序池,高级设置-->允许32位应用程序,如下图:

 

建议专门针对兼容32位应用驱动新建一个应用池。 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有