解决方案汇总:
第一
故障描述:服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。
管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到。请检查此日志项以查明导致该错误发生的原因。
解决过程:
微软Framework1.1 SP1 安全更新程序 (KB886903)补定可能会导致web应用程序“服务器应用程序不可用”和“aspnet_wp.exe 意外停止”
cowbird
2005.02.15
很恼火,突然发现IIS中的应用程序不能浏览页面了,试了试任何一个aspx页面也打不开。重新用vs.net建立了个新的web应用程序,现象依旧。
电脑环境:
win2003,vs.net2003
问题现象:
1)当想浏览某个页面的时,会显示"服务器应用程序不可用" 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。 管理员注意事项:详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到。
到日志去一查,发现:“aspnet_wp.exe (PID: 356)意外停止。”
2)如果选择调试,显示如下图:
尝试:
想了想,问题是突然出现的,其间没有安装什么软件,也没有中病毒,奇怪了。
若根据"ExecutionEngineException"在google上查来的结果是“无药可救”,做好“最坏打算”,重装!。:)
根据“aspnet_wp.exe (PID: 356)意外停止”在google上查了查,发现网上的解决方法也无非是重新装IIS,重新装系统,重新装framework或者vs.net。
既然这样,先选择最简单的IIS重装,发现问题依旧。
接下来选择修复安装win2003,安装结束后,发现问题解决了。
大家都知道修复安装后的操作系统,补丁都会没有了。我就在一个个把补丁update,全部update好了以后,再运行,问题又出现。
原因定位:
显而易见,问题的原因就是补丁。不断的尝试,定位到Microsoft .NET Framework 版本 1.1 Service Pack 1 安全更新程序 (KB886903)把它删除后,问题解决。郁闷啊!花了我一整天时间,强烈要求微软“赔偿”。再网上一查,发现老外也遇到过同样这个问题http://www.mcse.ms/message1412685.html,也同样待解决。
第二
文框架下出现:
服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。
管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到。请检查此日志项以查明导致该错误发生的原因。
英文框架下出现:
Server Application Unavailable
The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.
Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.
搜索了网上的大量资料,该问题比较经典,出现错误也很多,但国内与国外的网站与论坛上却没有比较完善的解决方法。经过一番摸索与尝试,终于有了比较好的解决方法。有三,如下:
1.重新开一个应用程序池,然后为这个目录单独指定这个池
2.访问权限的设置问题
3.重新装iis,再装framework
我的问题是属于第二个,访问权限的问题。做如下设置即可解决该问题:
在该web sites的virtual directory下,将Permissions设置一下,里面应包含
ASP.NET
IIs_WPG
Internet来宾帐户
System
而且ASP.NET权限要设置为 write & read.
设置后,一切运行正常。
第三
服务器应用程序不可用
您试图在此Web服务器上访问的Web应用程序当前不可用。请点击Web浏览器中的“刷新”按钮重试您的请求。
管理员注意事项:详述此特定请求失败原因的错误信息可在Web服务器的系统事件日志中找到。请检查此日志项以查明导致该错误发生的原因。
情况是这样的,我机器装有.NETFramework1.1和2.0,首先是我打开的2.0程序出现这个错误,发现这个错误以后,我打1.1的程序也不能运行。我选择了最传统的办法,重新启动我的系统。结果问题还是那样没有什么改变,只好重装我的IIS了,把1.1和2.0两个框架都配置好,结果是2.0的程序可以运行,1.1的程序还是那个错误。
没有办法,上网看看有没有什么相关的资料,看到了这篇文章:
http://www.cnblogs.com/cowbird/archive/2005/02/16/104546.html
但是我想问题不可能是那个样子,想来想去,想到了查看应用程序日志:改下一虚拟目录的应用程序池.让ASP.NET1.1和ASP.NET2.0的虚拟目录使用不同的应用程序池.
结果问题解决,好了搞定!
楼上是高手,确实是应用程序池的问题,给ASP.NET2.0的站点用新的池问题就解决了。
新建应用程序池的步骤
1.单击“开始”,指向“程序”,然后单击“控制面板”。
2.双击“管理工具”,然后双击“Internet信息服务(IIS)”。
3.右键单击“应用程序池”,指向“新建”,然后单击“应用程序池”。
4.在“应用程序池ID”文本框中键入AppPool1。
5.单击“确定”。
将应用程序分配到应用程序池
1.单击“开始”,指向“程序”,然后单击“控制面板”。
2.双击“管理工具”,然后双击“Internet信息服务(IIS)”。
3.双击“Web站点”。
4.双击“默认Web站点”。
5.右键单击“DebugApp1”,然后单击“属性”。
6.在“主目录”标签中的“应用程序池”列表框中选择“AppPool1”,然后单击“确定”。还有最重要的一点是设置应用程序池-->属性-->标识-->预定义帐户为本地系统
第四
故障描述:服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。
这个问题见了好几次,在.net下 Microsoft visual 2005->visual studio tools->visual studio 2005命令提示下输入aspnet_regiis -r,就可以只是重新注册一下而已这是因为你先装了.net而后装了iis用户的权限没加进运引起我的就是这种情况,先安装了.net环境,然后才安装 了IIS。
•使用.net自动的状态服务(Asp.net State Service);
•使用.net的Session数据库;
•使用Memcached。
•使用Cookie方式实现多个站点间的共享(这种方式只限于几个站点都在同一域名的情况下);
这里我们就 演练一下 以数据库的形来存储Session,来实现多站点共享Session。
首先我们 建好一下站点,如下图:
Default.aspx
其中 有二个Button ,SetSession 主要是用于给一个 Session 赋值(如:Session["ShareValue"] = “abcd”) ,
GetSession 主要就是获得 一个 Session 值。
具体代码如下:
代码部分就这么多就行了…
下面就是要配置一下 Web.config了 , 其实主要就是在 <system.web>这个节点中 增加 machineKey 及 sessionState 这两个节点,
1.增加machineKey 主要作用是:
“按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。“ ,具体可以查一下其它资料。
2.增加 sessionState 主要是让 Session 保存在数据库中。
具体配置如下:
<machineKey validationKey="86B6275BA31D3D713E41388692FCA68F7D20269411345AA1C17A7386DACC9C46E7CE5F97F556F3CF0A07159659E2706B77731779D2DA4B53BC47BFFD4FD48A54"
decryptionKey="9421E53E196BB56DB11B9C25197A2AD470638EFBC604AC74CD29DBBCF79D6046"
validation="SHA1" decryption="AES"/>
<sessionState mode="SQLServer" sqlConnectionString="Data Source=PC-07195;Initial Catalog=AWBUISession;Persist Security Info=True;User ID=jins;Password=js@#$1234" allowCustomSqlDatabase="true" cookieless="false" timeout="100"/>
网站部分 这样就好了。。。 下面就是要配置据库了…..
数据库配置:
使用aspnet_regsql.exe工具
ASP.NET 2.0版本后微软提供了aspnet_regsql.exe工具可以方便的配置Session数据库.该工具位于 Web 服务器上的"系统根目录\Microsoft.NET\Framework\版本号"文件夹中.
使用举例:
aspnet_regsql.exe -S . -U sa -P 123456 -ssadd -sstype p
-S参数:
表示数据库实例名称. 可以用"."表示本机.
-U和-P参数:
表示用户名和密码.
-E参数:
可以再-U –P 与 -E中选择一组. –E表示以当前系统用户通过windows身份验证登录数据库, -U -P则是使用SqlServer用户登录数据库.
-ssadd / –ssremove 参数:
-ssadd表示是添加Session数据库, -ssremove表示移除Session数据库.
sstype 参数说明:
t
将会话数据存储到 SQL Server tempdb 数据库中。这是默认设置。如果将会话数据存储到 tempdb 数据库中,则在重新启动 SQL Server 时将丢失会话数据。
将会话数据存储到 ASPState 数据库中,而不是存储到 tempdb 数据库中。
c
将会话数据存储到自定义数据库中。如果指定 c 选项,则还必须使用 -d 选项包括自定义数据库的名称。
我的设置是:aspnet_regsql.exe -S . - E -d AWBUISession -ssadd -sstype c
好了。基本的 我们就已经搞定了。。
现在 我们分别把我们刚建的一个网站 部署 到 IIS 中。不过我们既然要负载。至少也的部署两份。
我们把 其中一个 服务器中的 defaut.aspx 中 “服务器 1” 改成 “服务器 2” ,这样做的主要目地是 做一下 区别!
具体如下:
两个网站的 URL分别是:
server 1:127.0.0.1:8081;
server 2:127.0.0.1:8080;
OK。下面我们就是 配置 Nignx了。
首先 在 nginx\conf 配置 文件中找到 nginx.conf 这个文件 ,就记事本打开,
做如上的 设置:
OK。 nginx 这样配置 就算OK 了。 我们启动一下 nginx ..
在浏览器中 输入我们 在 nginx 中配置的 URL 如:127.0.0.1:8090
我们会看到 服务器 1 已经开始为我们服务了,我们再点一下 “SetSession”来设置一下一个 会话值,
我们会看到 服务器 2 开始 工作。这时我们再点一下 “GetSesion”看一下 刚才在 服务器 1 设置 的会话值,结果如下 :
出现这种情况 ,主要就是在数据库中存储 一个会话时 没有做到 服务器1 和服务2的Session 共享,主要是 在
ASPStateTempSessions 这个表中的 一个SessionID ,
其中的SessionId包括两个部分:网站生成的24位SessionID及8位AppName对于不同的站点,其AppName不同,在能够在不同站点下使24位SessionID相同的情况下,要保证经过组合加上AppName后的SessionID相同,可以通过修改存储过程TempGetAppID,使其得到的SessionID与AppName无关,修改TempGetAppID如下:
ALTER PROCEDURE [dbo].[TempGetAppID]
@appName tAppName,
@appId int OUTPUT
AS
SET @appName = 'Test' --LOWER(@appName) 修改这里,使多个站点的APPname ,为一个固定值。
SET @appId = NULL
SELECT @appId = AppId
FROM [AWBUISession].dbo.ASPStateTempApplications
WHERE AppName = @appName
IF @appId IS NULL BEGIN
BEGIN TRAN
SELECT @appId = AppId
FROM [AWBUISession].dbo.ASPStateTempApplications WITH (TABLOCKX)
WHERE AppName = @appName
IF @appId IS NULL
BEGIN
EXEC GetHashCode @appName, @appId OUTPUT
INSERT [AWBUISession].dbo.ASPStateTempApplications
VALUES
(@appId, @appName)
IF @@ERROR = 2627
BEGIN
DECLARE @dupApp tAppName
SELECT @dupApp = RTRIM(AppName)
FROM [AWBUISession].dbo.ASPStateTempApplications
WHERE AppId = @appId
RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',
18, 1, @appName, @dupApp)
END
END
COMMIT
END
RETURN 0
经过以上修改之后,下面要实现多个站点共用同一个SessionID.
重启一下各站点。再在浏览一下网站
点 “SetSession”,
再点:“GetSession”
这样 我们就看到 服务器2 给出了我们 刚才在 服务器 1 中设置 的会话值了。
我们 再点:“GetSession”,
可以看到 服务器1 和服务器 2 返回的是相同的结果,达到了 “多站点共享Session”
附加一点: Session 过期删除,主要是 在 SQL server 代理中的 作业完成。
具体的可以,查一下其它相关资料.
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override ,即
<Directory />
AllowOverride None
</Directory>
在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 ".htaccess" 作用域的指令都允许出现在 .htaccess 文件中。
而对于 URL rewrite 来说,至少需要把目录设置为
< Directory /myblogroot/>
AllowOverride FileInfo
< /Directory>
2.在要支持url rewirte的目录启用 Options FollowSymLinks和AllowOverride All
Alias /php "c:/web/php/"
<Directory "c:/web/php/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
这样通过http://localhost:8080/php/访问时,/php/和其下面的子目录将支持url rewrite
1 AuthConfig 允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile和Require
2 FileInfo 允许使用文件控制类型的指令。它们包括AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority
3 Indexes 允许使用目录控制类型的指令。它们包括AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName
4 Limit 允许使用权限控制指令。它们包括Allow Deny和Order
5 Options 允许使用控制目录特征的指令.他们包括Options 和XBitHack
Options
1 All 准许以下除MultiViews以外所有功能
2 MultiViews 允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用
3 Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择
4 IncludesNOEXEC 准许SSI,但不可使用#exec和#include功能
5 Includes 准许SSI
6 FollowSymLinks 在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略
7 SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的链接
8 ExecCGI 在该目录下准许使用CGI