经常看到网友提出 HTTP 500错误, 不知错误在哪里, 现提供一个简便的办法.
发布时间:2006-5-29 9:05:38   收集提供:shendata



前提:

1.设定IIS的相应要调试的站点, 在其 站点属性 => 主目录 => 配置 => 应用程序调试 栏中, 确保 发送详细 ASP 错误消息给客户(S) 一项被选中.

2. IE 设置 Internet 选项 => 高级 => 去掉 显示友好 HTTP 错误信息

当出现 500 错误时, 用一可撤销的文本编辑器(如常用的DreamWeaver, EditPlus)将你的 asp 源代码 全部去除, 随便写几个字, 保存(别退出), 刷新你的页面..这时应该不会有错误; 切换到 编辑界面, 撤销刚才的动作, 保存, 再重新刷新...这时就会出现详细的出错信息了(出错行, 详细信息).
dalongleng 2006-02-14 01:33
带宽是首先要考虑的问题之一
在探讨带宽问题时,我们先来谈谈internet连接类型和网络连接能力

internet带宽决定你的计算机获得数据的速度和可以同时处理的请求数量。如果你不能针对进入你的站点的请求数量提供足够的带宽,将出现延迟和失败。你所拥有的带宽量由所选定的连接类型决定。
通过推测内容文件的平均大小、发送这样大小的文件所需的时间以及你想要同时支持的用户数量,你可以选择合理的连接。
作为一般的规则,发送页面的时间应该少于5秒钟。这不包括附带的图形、音频和视频信息。通常情况下,附带的文件在加载文本文件后加载。针对附带文件的一般规则应该是少于30秒的时间内加载完成。这样访问速率就会提高。
在已经确定你的web或者ftp服务器所要求的带宽后,请确定你是否提供其他对带宽有要求的服务。如:邮件服务、音频和视频服务等。因此,请保证已经包括足够的带宽用于这些服务上。
在通常情况下,internet连接到达一个路由器,然后网卡将计算机连接到该路由器上。你需要一个高性能的网卡以防止internet连接和计算机之间出现的瓶颈。例如:你用1.54mbps带宽的t1线路连接到internet上,应该将服务器放置在10mbps带宽的以太lan上。但是,要使用t3线路连接到internet上,你应该考虑为服务器提供fddilan,因为t3的45mbps带宽比以太的10mbps带宽高的多。

现在,北京电报局的带宽是t3线路,45mbps。上海长信局是105mbps的带宽。chinaasp的服务器就选择放在上海长信局,所以排除了带宽对访问速度的影响 。


网络连接能力

你所采用的网络连接类型直接影响服务器的性能。每当网络连接不能控制通过他发送的数据量时,服务器的性能就会受到损害。此外,在计算机上运行的需要占用网络带宽的其他应用程序也影响iis 可以使用的带宽。

假设你想将一个文本页面的传输时间持续5秒钟,同时假定向接受该页面的用户传送了月个大小为63360位的文本文件,用5秒的时间除63360位=12672bps/每用户。
例如:对t1线路,用12672bps/每用户除1540000位/每秒(bps)=121,所以,在t1连接上可以同时支持121个用户。t3所支持的用户支持超过5000个用户。56k(桢中继)可以支持10-20个用户,isdn可以支持10-50个用户。

cpu的瓶颈影响

信息在计算机的各种部件中,与cpu时钟速度和cpu移动信息所使用的数据总线大小有关。更快的时钟速度意味着在相同的时间周期内数据总线可以进行更多的往返行程。通常用兆赫(mhz)表示时钟,根据总线的大小,每个行程可以携带16、32、64位的数据。携带多少数据由所使用的操作系统和应用程序所基于的传输速度决定着。

cpu瓶颈表现为很高的cpu利用百分比数,同时网卡保持着极低的性能。如果cpu利用率高,你可以升级cpu、向同一台计算机额外增加cpu或额外增加计算机,在该计算机上放置您的站点,然后在它们之间分配通讯量,如果您正在web服务器上运行其他cpu密集型应用程序,如数据库应用程序,你可以将其他应用程序移动到另外的机器上。

如果您的服务器装有sql server,在条件允许的情况下,建议您的服务器配置双cpu,数据库用一个cpu,其他服务用一个cpu。或者您再添加一台服务器做为专门的sql server服衿鳌?br>
这样可以提高您站点的访问性能。

dalongleng 2006-02-14 01:34
使用HTTP的持续作用

使用HTTP的持续作用(Keep-Alive)时,IIS与浏览器的连线不会断线,可以改善执行效率,直到浏览器关闭时连线才会断线。因为维持「Keep-Alive」状态时,在每次用户端请求时都不须重新建立一个新的连接,所以将改善服务器的效率。

此功能为HTTP 1.1预设的功能,HTTP 1.0加上Keep-Alive header也可以提供HTTP的持续作用功能。

使用HTTP的持续作用可以改善15~20%的执行效率。

如何使用HTTP的持续作用呢?步骤如下:

在 [Internet服务管理器] 中,选取整个IIS电脑、或Web站点,在 [属性] 之 [主目录] 页,勾选 [HTTP的持续作用] 选项。


不使用记录

不使用记录可以改善5~8%的执行效率。

如何设定不使用记录呢?步骤如下:

在 [Internet服务管理器] 中,选取整个IIS电脑、或Web站点,在 [属性] 之 [主目录] 页,不勾选 [使用记录] 选项。


设定非独立的处理程序

使用 [独立] 的处理程序会损失20%的执行效率,此处所谓「独立」系指将 [主目录]、[虚拟目录] 页之应用程
式保护选项设定为 [高(独立的)] 时。因此 [应用程式保护] 设定为 [低 (IIS处理程序)] 时执行效率较高,设定画面如下:

如何设定非「独立」的处理程序呢?步骤如下:

在 [Internet服务管理器] 中,选取整个IIS电脑、Web站点、或应用程式的起始目录。在 [属性] 之 [主目录]、[虚拟目录] 页,设定应用程式保护选项为 [低 (IIS处理程序)] 。

调整缓存(Cache)记忆体

IIS 5.0将静态的网页资料暂存在缓存(Cache)记忆体当中;IIS 4.0则将静态的网页资料暂存在档案当中。调整缓存(Cache)记忆体的保存档案数量可以改善执行效率。

ASP指令档案执行过後,会在暂存在缓存(Cache)记忆体中以提高执行效能。增加缓存记忆体的保存档案数量,可提高Active Server Pages之效能。

可以设定所有在整个IIS电脑、「独立」Web站点、或「独立」应用程式上执行之应用程式的缓存记忆体档案数量。

如何设定缓存(Cache)功能呢?步骤如下:

在 [Internet服务管理器] 中,选取整个IIS电脑、「独立」Web站点、或「独立」应用程式的起始目录。在 [属性] 之 [主目录]、[虚拟目录] 页,按下 [设定] 按钮时,即可由 [处理程序选项] 页设定 [指令档缓存记忆体] 。

如何设定缓存(Cache)记忆体档案数量呢?步骤如下:

在 [Internet服务管理器] 中,选取整个IIS电脑、或Web站点的起始目录。在 [属性] 之 [服务器扩充程式] 页,按下 [设定] 按钮。即可设定缓存(Cache)记忆体档案数量 。

勿使用CGI程式

使用CGI程式时,因为处理程序(Process)须不断地产生与摧毁,造成执行效率不佳。

一般而言,执行效率比较如下:

  静态网页(Static):100

  ISAPI:50

  ASP:10

  CGI:1

换句话说,ASP比CGI可能快10倍,因此勿使用CGI程式可以改善IIS的执行效率。

以弹性(Flexibility)而言:ASP > CGI > ISAPI > 静态网页(Static)。

以安全(Security)而言:ASP(独立) = ISAPI(独立)= CGI > ASP(非独立) = ISAPI(非独立)= 静态网页(Static)。

增加IIS 5.0电脑CPU数量

根据微软的测试报告,增加IIS 4.0电脑CPU数量,执行效率并不会改善多少;但是增加IIS 5.0电脑CPU数量,

执行效率会几乎成正比地提供,换句话说,两颗CPU的IIS 5.0电脑执行效率几乎是一颗CPU电脑的两倍,四颗CPU的IIS 5.0电脑执行效率几乎是一颗CPU电脑的四倍。

IIS 5.0将静态的网页资料暂存在缓存(Cache)记忆体当中;IIS 4.0则将静态的网页资料暂存在档案当中。调整缓存(Cache)记忆体的保存档案数量可以改善执行效率。


勿使用ASP侦错功能

勿使用ASP侦错功能可以改善执行效率。

如何勿使用ASP侦错功能呢?步骤如下:

在 [Internet服务管理器] 中,选取Web站点、或应用程式的起始目录,按右键选择 [属性],按 [主目录]、[虚拟目录] 或 [目录] 页,按下 [设定] 按钮,选择 [应用程式侦错] 页,不勾选 [使用ASP服务器端指令侦错]、[使用ASP用户端指令侦错] 选项。


静态网页采用HTTP 压缩

静态网页采用HTTP 压缩,大约可以减少20%的传输量。

HTTP压缩功能使用或关闭,系针对整台IIS服务器来设定。

用户端使用IE 5.0浏览器连线到已经使用HTTP压缩IIS 5.0之Web服务器,才有HTTP压缩功能。

如何使用HTTP压缩功能呢?步骤如下:

若要使用HTTP压缩功能,方法为在 [Internet服务管理器] 中,选取电脑之 [属性],在 [主要属性] 之下选取[WWW服务]。然後按一下 [编辑] 按钮,在 [服务] 页上,选取 [压缩静态档案] 可以压缩静态档案,不选取 [压缩应用程式档案] 。

动态产生的属性档案(压缩应用程式档案)也可以压缩,但是须耗费额外CPU处理时间,若% Processor Time已经百分之八十或更多时,建议不要压缩。

测试执行效率

执行效率可使用一些工具来测试,譬如可使用加压测试工具(Stress Tool),可由以下网址下载:

http://webtool.rte.microsoft.com

学会了吗?

dalongleng 2006-02-14 01:34
作为一个www服务器软件,微软公司的internet infomation server(iis)简单易学,管理方便,得到了广泛的使用。您还可以通过isapi过滤器,进行自己定制的处理,来增强iis的功能。isapi过滤器可以定制以下的处理:接收http协议头预处理、发送http协议头预处理、发送生数据预处理、获得生数据预处理、http会话结束信息处理、自定义的安全认证机制、url映射信息处理、日志记录处理等。灵活利用这些定制处理,您可以完成许多看似难以实现的功能,得到意想不到的效果。但是isapi过滤器使用不当也会影响服务器的性能。


isapi过滤器的开发非常简单,只需要完成三个接口dll函数即可。它们是getfilterversion()、httpfilterproc()、terminatefilter(),大家可以查看msdn了解详细的用法。isapi过滤器是dll文件,一般用c/c++语言开发。为使isapi过滤器能够运行,您需要在注册表的hkey_local_machine\system\currentcontrolset\
services\w3svc\parameters下建立一个字符串项,其名称为"filter dlls",值为isapi过滤器文件的全路径名称。若这个字符串项已经存在,只需把它的全路径名称加入其中,不同的isapi过滤器文件之间用";"分隔,您可以根据执行的优先顺序加在适当的位置。设置好后重新启动iis服务,您的isapi过滤器就发挥作用了。

下面作者举一个具体的应用例子。

对访问内容进行统计分析:
通常我们在需要计数的页面内放一个计数器,或者使用asp文件来实现计数功能。这种方法不能适用于如readme.txt等其他非html格式的文件。如果使用iis的日志功能又太占用空间而不方便。作者通过定制url映射信息处理来跟踪感兴趣的几个文件的计数统计,将结果记录在一个文件中。

下面是它的源程序 。

fcount.def:
library fcount
exports getfilterversion
httpfilterproc
terminatefilter

fcount.c:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <httpfilt.h>

#define logfile "c:\\inetpub\\fcount.log"
#define pages 5
char* urls[] = {
"/default.htm",
"/banner.gif",
"/product/readme.txt",
"/product/product1.htm",
"/product/product2.htm"
};
int counts[pages];

bool winapi getfilterversion
(http_filter_version *pver)
{
int i;

pver->dwfilterversion = http_filter_revision;
strcpy(pver->lpszfilterdesc, "fcount");
pver->dwflags = sf_notify_url_map; /* 过滤的内容 */

for (i=0; i<pages; i++) { /* 从文件读入初始计数值 */
counts = getprivateprofileint("visitcounter",
urls,
0, logfile);
}

return true;
}

dword winapi httpfilterproc
(http_filter_context *pfc,
dword notetype, void *pvnote)
{
int i;
char lurl[512];
char buf[16];

strcpy(lurl, ((phttp_filter_url_map)pvnote)
->pszurl);
_strlwr(lurl);
for (i=0; i<pages; i++) {
if (strcmp(lurl, urls)==0) {
counts ++; /* 计数值增加 */
if (counts%10==0) {
/* 当计数值满10时记入文件,
以免系统突然死掉时数据全部丢失 */
_itoa(counts, buf, 10);
writeprivateprofilestring("visitcounter",
urls, buf, logfile);
}
break;
}
}
return sf_status_req_next_notification;
}

bool winapi terminatefilter(dword dwflags)
{
int i;
char buf[16];

for (i=0; i<pages; i++) {
  /* 系统停止时将计数值写入文件 */
_itoa(counts, buf, 10);
writeprivateprofilestring("visitcounter",
urls, buf, logfile);
}
return true;
}

以上二个例子作者使用vc 6.0编译,在winnt2000 + sp3 和 iis 5.0上调试通过。

dalongleng 2006-02-14 01:35
一、pws下配置activeperl,使pws支持cgi程序。

1.在windows98下安装pws4.0(microsoft personal web server 4.0 在windows98系统光盘的add-ons目录下)。

2.下载api522e.exe(windows98下建议用这个),下载地址为:

http://www.cgiunion.net/perlsoft/api522e.exehttp://www.activestate.com/activeperl/download/api522e.exe 或者是 http://www.fykx.net/download/cgi/api522e.exe

3.安装api522e.exe,建议安装在c:\usr目录下,因为每个cgi程序文件第一行都要申明cgi解释程序的路径(#!/usr/bin/perl)。

<img border=0 src=http://www.y666.net/rj1/00000001/001.jpg width="476" height="354">

4.运行regedit (需要重新启动计算机才能生效)
找到: hkey_local_machine\system\currentcontrlset
\services\w3svc\parameters\scriptmap\ 目录
增加以下键值:
键名: ".cgi" 键值: "c:\usr\bin\perl.exe %s %s"
键名: ".pl" 键值: "c:\usr\bin\perl.exe %s %s"

<img border=0 src=http://www.y666.net/rj1/00000001/002.jpg width="400" height="278">

5.为pws添加虚拟目录(如下图),目录别名为:cgi-bin,把访问属性设为:执行,目录位置为本地硬盘的任何目录(cgi程序就存放在这个目录中)。

<img border=0 src=http://www.y666.net/rj1/00000001/003.jpg width="496" height="347">

6.编写测试程序:
文件test.cgi放在cgi-bin这个目录下,代码如下
#!/usr/bin/perl
print "content-type:text/html\n\n";
print "<title>这是我的第一个程序</title>";
print "哈!哈!哈!我成功啦!!!";
在浏览器地址栏中键入http://127.0.0.1/cgi-bin/test.cgi
如果在浏览器中显示:哈!哈!哈!我成功啦!!!你就成功了 。

7.有关出现错误文题的解决,以调试yuzibbs3000为例,把配置文件setup.cgi按要求设置好后开始运行,结果

出现如下错误:
cgi error
the specified cgi application misbehaved by not returning a complete set of http headers. the

headers it did return are:

can't locate setup.cgi in @inc (@inc contains: c:/usr/lib c:/usr/site/lib .) at

c:\inetpub\wwwroot\cgi-bin\bbs3000\bbs.cgi line 9.

上一段的中文意思为:
“cgi 错误
指定的 cgi 应用程序因为没有返回完整的 http 标题而运行不正常。它返回的标题是:”

经过分析bbs.cgi程序代码,发现程序开始部分有require "setup.cgi";这么一句,这一句是程序对setup.cgi
配置文件发出请求,这种情况在unix系统下不会出现错误,在win98和nt系统下必须写明绝对路径,把这一句改

为:require "c:/inetpub/wwwroot/cgi-bin/bbs3000/setup.cgi";再也不会出现错误,其他cgi文件也是如此。


二、iis5.0下配置activeperl,使iis5.0支持cgi程序。

1.在windows2000下添加internet信息服务(iis)组件。

2.下载最近的perl解释程序activeperl-5.6.0.620-mswin32-x86-multi-thread.msi,下载地址为:

ftp://www.newhua.com/activeperl-5.6.0.620-mswin32-x86-multi-thread.msi 或者是
http://www.fykx.net/download/cgi/activeperl-5.6.0.620-mswin32-x86-multi-thread.msi

3.安装activeperl-5.6.0.620-mswin32-x86-multi-thread.msi,建议安装在c:\usr目录下,因为每个cgi程序文件第一行都要申明cgi解释程序的路径(#!/usr/bin/perl)。

4.运行regedit (需要重新启动计算机才能生效)
找到: hkey_local_machine\system\currentcontrlset
\services\w3svc\parameters\scriptmap\ 目录
增加以下键值:
键名: ".cgi" 键值: "c:\usr\bin\perl.exe %s %s"
键名: ".pl" 键值: "c:\usr\bin\perl.exe %s %s"

5.打开“internet 服务管理器”,选中“默认web站点”或者其它站点,打开它的“属性”窗口。在“web站点”页下,改变“ip地址”:“全部未分配”为“(您机子的ip地址,例如:202.117.131.6)”;“tcp端口”为“80”。接着,选中“主目录”页,单击“应用程序设置”下的“配置”按钮后,在新窗口下单击“添加”按钮;在“可执行文件”中输入“c:\usr\bin\perl.exe %s %s”,在“扩展名”中输入“.cgi”,把"脚本引擎"打上勾,点击“确定”(亦可添加其他,如“.pl”等)。接着,选中“isapi筛选器”页,单击“添加”按钮;在“筛选器名称”中输入“cgi”,在“可执行文件”中输入“c:\usr\bin\perlis.dll”,点击“确”。

<img border=0 src=http://www.activeedu.net/php/vb141/pic/004.jpg>

关闭所有窗口,重启系统后,可打开ie浏览器进行测试。

6.编写测试程序(同上)

7.有关出现错误问题的解决(同上)

dalongleng 2006-02-14 01:36
如果你使用iis 5.0,你会发现iis 5.0的错误信息比iis 4.0来的含糊的多了,这是由于iis 5.0开始使用asperror处理错误的缘故 。就拿数据库登录失败来说吧
iis 4.0显示的是
microsoft ole db provider for sql server 错误 '80040e4d'
login failed for user 'xxx'.
xxxxx.asp,行xx
在iis 5.0中就显示
http 500.100 - 内部服务器错误 - asp 错误
internet 信息服务
--------------------------------------------------------------------------------
技术信息(适用于支持人员)
错误类型:
microsoft ole db provider for sql server (0x80040e4d)
/jjx/activeubb/default.asp, 第 95 行
浏览器类型:
mozilla/4.0 (compatible; msie 5.5; windows nt 5.0)

页:
get /jjx/activeubb/default.asp

时间:
2000年4月23日, 12:05:57

详细信息:
microsoft 支持


这对于asp的安全性来说是个好事,但对于我们调试程序来说,就不是那么方便了。以下简单的介绍一下,如果回到iis 4.0的方法

1、选择你的站点,属性,自定义错误信息
2、选择500:100错误,编辑属性
3、通常原设置值为url,\iishelp\common\500-100.asp
4、改为"默认值",确定,确定
4、现在错误处理变为“internal server error - asp error"
注意
以上修改只是为了调试asp程序方便,调试完毕后应该重新设回原样

dalongleng 2006-02-14 01:36
 一.错误表现

iis5的http 500内部服务器错误是我们经常碰到的错误之一,它的主要错误表现就是asp程序不能浏览但htm静态网页不受影响。另外当错误发生时,系统事件日志和安全事件日志都会有相应的记录。

具体如下:

(一)ie中的表现

当浏览以前能够正常运行的asp页面时会出现如下的错误:

网页无法显示
您要访问的网页存在问题,因此无法显示。
请尝试下列操作:
打开 http://127.0.0.1 主页,寻找指向所需信息的链接。
单击刷新按钮,或者以后重试。
http 500 - 内部服务器错误
internet 信息服务
技术信息(支持个人)
详细信息:
microsoft 支持
或者是:
server application error
the server has encountered an error while loading an application during the processing of your request. please refer to the event log for more detail information. please contact the server administrator for assistance.

(二)安全日志记录(2条)
事件类型: 失败审核
事件来源: security
事件种类: 登录/注销
事件 id: 529
日期: 2001-9-9
事件: 11:17:07
用户: nt authority\system
计算机: myserver
描述:
登录失败:
原因: 用户名未知或密码错误
用户名: iwam_myserver
域: mydom
登录类型: 4
登录过程: advapi
身份验证程序包: microsoft_authentication_package_v1_0
工作站名: myserver
事件类型: 失败审核
事件来源: security
事件种类: 帐户登录
事件 id: 681
日期: 2001-9-9
事件: 11:17:07
用户: nt authority\system
计算机: myserver
描述:
登录到帐户: iwam_myserver
登录的用户: microsoft_authentication_package_v1_0
从工作站: myserver
未成功。错误代码是: 3221225578
(三)系统日志中的记录(2条)
事件类型: 错误
事件来源: dcom
事件种类: 无
事件 id: 10004
日期: 2001-9-9
事件: 11:20:26
用户: n/a
计算机: myserver
描述:
dcom 遇到错误“无法更新密码。提供给新密码的值包含密码中不允许的值。 ”并且无法登录到 .\iwam_myserver 上以运行服务器:
{3d14228d-fbe1-11d0-995d-00c04fd919c1}
事件类型: 警告
事件来源: w3svc
事件种类: 无
事件 id: 36
日期: 2001-9-9
事件: 11:20:26
用户: n/a
计算机: myserver
描述:
服务器未能转入应用程序 '/lm/w3svc/4/root'。错误是 'runas 的格式必须是<域名>\<用户名>或只是<用户名>'。
若要获取关于此消息的更多的信息,请访问 microsoft 联机支持站点: http://www.microsoft.com/contentredirect.asp

二.原因分析
综合分析上面的错误表现我们可以看出,主要是由于iwam账号(在我的计算机即是iwam_myserver账号)的密码错误造成了http 500内部错误。
在详细分析http500内部错误产生的原因之前,先对iwam账号进行一下简要的介绍:iwam账号是安装iis5时系统自动建立的一个内置账号,主要用于启动进程之外的应用程序的internet信息服务。iwam账号的名字会根据每台计算机netbios名字的不同而有所不同,通用的格式是iwam_machine,即由“iwam”前缀、连接线“_”加上计算机的netbios名字组成。我的计算机的netbios名字是myserver,因此我的计算机上iwam账号的名字就是iwam_myserver,这一点与iis匿名账号isur_machine的命名方式非常相似。
iwam账号建立后被active directory、iis metabase数据库和com+应用程序三方共同使用,账号密码被三方分别保存,并由操作系统负责这三方保存的iwam密码的同步工作。按常理说,由操作系统负责的工作我们大可放心,不必担心出错,但不知是bug还是其它什么原因,系统的对iwam账号的密码同步工作有时会失败,使三方iwam账号所用密码不统一。当iis或com+应用程序使用错误iwam的密码登录系统,启动iis out-of-process pooled applications时,系统会因密码错误而拒绝这一请求,导致iis out-of-process pooled applications启动失败,也就是我们在id10004错误事件中看到的“不能运行服务器{3d14228d-fbe1-11d0-995d-00c04fd919c1} ”(这里{3d14228d-fbe1-11d0-995d-00c04fd919c1} 是iis out-of-process pooled applications的key),不能转入iis5应用程序,http 500内部错误就这样产生了。

三.解决办法
知道了导致http 500内部错误的原因,解决起来就比较简单了,那就是人工同步iwam账号在active directory、iis metabase数据库和com+应用程序中的密码。
具体操作分三步,均需要以管理员身份登录计算机以提供足够的操作权限(iwam账号以iwam_myserver为例)。
(一)更改active directory中iwam_myserver账号的密码
因iwam账号的密码由系统控制,随机产生,我们并不知道是什么,为完成下面两步的密码同步工作,我们必须将iwam账号的密码设置为一个我们知道的值 。
1、选择“开始”->“程序”->“管理工具”->"active directory用户和计算机",启动“active directory用户和计算机”管理单元。
2、单击“user”,选中右面的“iwam_myserver”,右击选择“重设密码(t)...”,在跳出的重设密码对方框中给iwam_myserver设置新的密码,这儿我们设置成“aboutnt2001”(没有引号的),确定,等待密码修改成功。
(二)同步iis metabase中iwam_myserver账号的密码
可能因为这项改动太敏感和重要,微软并没有为我们修改iis metabase中iwam_myserver账号密码提供一个显式的用户接口,只随iis5提供了一个管理脚本adsutil.vbs,这个脚本位于c:\inetpub\adminscripts子目录下(位置可能会因你安装iis5时设置的不同而有所变动)。
adsutil.vbs脚本功能强大,参数非常多且用法复杂,这里只提供使用这个脚本修改iwam_myserver账号密码的方法:
adsutil set w3svc/wamuserpass password
"password"参数就是要设置的iwam账号的新的密码。因此我们将iis metabase中iwam_myserver账号的密码修改为“aboutnt2001”的命令就是:
c:\inetpub\adminscripts>adsutil set w3svc/wamuserpass "aboutnt2001"
修改成功后,系统会有如下提示:
wamuserpass: (string) "aboutnt2001"
(三)同步com+应用程序所用的iwam_myserver的密码
同步com+应用程序所用的iwam_myserver的密码,我们有两种方式可以选择:一种是使用组件服务mmc管理单元,另一种是使用iwam账号同步脚本synciwam.vbs。
1、使用组件服务mmc管理单元
(1)启动组件服务管理单元:选择“开始”->“运行”->“mmc”,启动管理控制台,打开“添加/删除管理单元”对话框,将“组件服务”管理单元添加上。
(2)找到“组件服务”->“计算机”->“我的电脑”->“com+应用程序”->“out-of-process pooled applications”,右击“out-of-process pooled applications”->“属性”。
(3)切换到“out-of-process pooled applications”属性对话框的“标志”选项卡。“此应用程序在下列账户下运行”选择中“此用户”会被选中,用户名是“iwam_myserver”。这些都是缺省的,不必改动。在下面的“密码”和“确认密码”文本框内输入正确的密码“aboutnt2001”,确定退出。
(4)系统如果提示“应用程序被一个以上的外部产品创建。你确定要被这些产品支持吗?”时确定即可。
(5)如果我们在iis中将其它一些web的“应用程序保护”设置为“高(独立的)”,那么这个web所使用的com+应用程序的iwam账号密码也需要同步。重复(1)-(4)步,同步其它相应out of process application的iwam账号密码。
2、使用iwam账号同步脚本synciwam.vbs
实际上微软已经发现iwam账号在密码同步方面存在问题,因此在iis5的管理脚本中单独为iwam账号密码同步编写了一个脚本synciwam.vbs,这个脚本位于c:\inetpub\adminscripts子目录下(位置可能会因你安装iis5时设置的不同而有所变动)。
synciwam.vbs脚本用法比较简单:
cscript synciwam.vbs [-v|-h]
“-v”参数表示详细显示脚本执行的整个过程(建议使用),“-h”参数用于显示简单的帮助信息。
我们要同步iwam_myserver账号在com+应用程序中的密码,只需要执行“cscript synciwam.vbs -v”即可,如下:
cscript c:\inetpub\adminscripts\synciwam.vbs -v
microsoft (r) windows script host version 5.6
版权所有(c) microsoft corporation 1996-2000。保留所有权利。
wamusername:iwam_myserver
wamuserpass:aboutnt2001
iis applications defined:
name, appisolated, package id
w3svc, 0, {3d14228c-fbe1-11d0-995d-00c04fd919c1}
root, 2,
iishelp, 2,
iisadmin, 2,
iissamples, 2,
msadc, 2,
root, 2,
iisadmin, 2,
iishelp, 2,
root, 2,
root, 2,
out of process applications defined:
count: 1
{3d14228d-fbe1-11d0-995d-00c04fd919c1}
updating applications:
name: iis out-of-process pooled applications key: {3d14228d-fbe1-11d0-995d-00c04fd919c1}
从上面脚本的执行情况可以看出,使用synciwam.vbs脚本要比使用组件服务的方法更全面和快捷。它首先从iis的metabase数据库找到iwam账号"iwam_myserver"并取出对应的密码“aboutnt2001”,然后查找所有已定义的iis applications和out of process applications,并逐一同步每一个out of process applications应用程序的iwam账号密码。
使用synciwam.vbs脚本时,要注意一个问题,那就是在你运行synciwam.vbs之前,必须保证iis metabase数据库与active directory中的iwam密码已经一致。因为synciwam.vbs脚本是从iis metabase数据库而不是从active directory取得iwam账号的密码,如果iis metabase中的密码不正确,那synciwam.vbs取得的密码也会不正确,同步操作执行到“updating applications”系统就会报80110414错误,即“找不到应用程序{3d14228d-fbe1-11d0-995d-00c04fd919c1}”。
好了,到现在为止,iwam账号在active directory、iis metabase数据库和com+应用程序三处的密码已经同步成功,你的asp程序又可以运行了!

dalongleng 2006-02-14 01:37
一、现象描述:
本地运行asp文件,ie提示:



server application error



the server has encountered an error while loading an application during the processing of your request. please refer to the event log for more detail information. please contact the server administrator for assistance.

查看日志文件:

系统日志具体描述如下:

dcom 错误 无 10010 nt authority\system myserver 服务器 {3d14228d-fbe1-11d0-995d-00c04fd919c1} 没有在限定的时间内用 dcom 注册。

w3svc 警告 无 36 n/a myserver 服务器未能转入应用程序 '/lm/w3svc/1/root'。错误是 '服务器运行失败 '。
若要获取关于此消息的更多的信息,请访问 microsoft 联机支持站点: http://www.microsoft.com/contentredirect.asp

应用程序日志具体描述如下:

com+ 错误 管理 4205 n/a myserver 由于在下列系统 api 错误,com+ 服务无法初始化。它通常是由本地计算机的系统资源存储问题引起的。
cryptacquirecontext
进程名称: dllhost.exe
该错误的严重性已导致进程终止。
错误代码= 0x80090017 : 提供程序类型未被定义。
com+ 服务内部信息:
文件: .\security.cpp, 行: 617

二、原因分析

    曾经删除过sa,sam文件是保存用户密码的数据库文件,删除后,所有的用户信息就会丢失,而相应的组信息也会随之丢失,虽然重新登录过系统,系统已经重新建立了sam文件,也重新安装了iis,iwam帐号也已经重新建立,但是,原用户组中的特殊信息却没有被恢复 。

    检查“开始”->“设置”->“控制面板”->“管理工具”->“组件服务”中,“控制台根目录”->“组件服务”->“计算机”->“我的电脑”->“com+应用程序”中,有一个iis out-of-process pooled applications该应用程序的id号即为{3d14228d-fbe1-11d0-995d-00c04fd919c1},很多系统报错找不到应用程序{3d14228d-fbe1-11d0-995d-00
c04fd919c1}之类的错误,就是因为该应用程序未能启动,打开该应用程序的属性,检查标识却为iwam用户,右键启动,报错。改为管理员后,可正常启动。把iwam加入本地管理员组中,也可正常启动。确定是因为iwam用户无权访问该应用程序所致。

三、解决办法
1、修改iwam_myserver帐号密码,在“开始”->“设置”->“控制面板”->“管理工具”->“计算机管理”中,“系统工具”->“本地用户和组”->“用户”里面,一个iwam_myserver(myserver为本地计算机名)的帐号内,右键更改密码,更改为一个自定义的密码即可,假设为“1234”;

2、修改iis内部iwam_myserver帐号密码,在c:\inetpub\adminscripts\目录下(iis安装默认目录),输入:c:\inetpub\adminscripts>adsutil.vbs set w3svc/wamuserpass "1234" .修改成功后,系统有如下提示wamuserpass:               (string) "******"

3、在“开始”->“设置”->“控制面板”->“管理工具”->“计算机管理”中,“系统工具”->“本地用户和组”->“用户”里面,确认iwam_my server用户只在guest组内,再在“本地用户和组”->“组”里面,右键点击users组属性,添加进nt authority\authenticated users和nt authority\interactive两个用户成员,确定。

4、在iis安装默认目录下输入:c:\inetpub\adminscripts>synciwam.vbs -v
将com+程序的用户改回为iwam用户,重新启动iis out-of-process pooled applications应用程序,没有再报错了,再重启iis,检查所有web站点服务,故障现象解除!
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50