代码改变世界

微软ASP.NET站点部署指南(12):Troubleshooting

2011-11-25 14:44  汤姆大叔  阅读(13560)  评论(5编辑  收藏  举报

这个页面列出的是Visual Studio 部署ASP.NET 程序时经常出现的问题。对于每个错误,都列出了可能出错的原因和解决方案。

 

使用SQL Server Compact时,页面出现Access is Denied

场景

使用SQL Server Compact数据库部署站点以后,运行页面出现如下错误:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

 

产生原因和解决方案

服务器上的NETWORK SERVICE账户需要读取SQL Service Compact原生库(\amd64或bin\x86目录)的权限,但没有读取该文件夹的权限。查看前面的章节如何给bin目录授权(确保子目录也有相同的权限)。

 

因权限不够不能读取配置文件

场景

使用Visual Studio发布按钮部署程序的时候,Output窗口出现如下错误信息:

An error occurred when reading the IIS Configuration File 'MACHINE/REDIRECTION'. The identity performing this operation was ... Error: Cannot read configuration file due to insufficient permissions.

 

产生原因和解决方案

使用one-click发布,必须使用管理员身份运行Visual Studio。关闭Visual Studio,以管理员身份重新运行Visual Studio。

 

不能连接到目标服务器

场景

使用Visual Studio发布按钮部署程序的时候,Output窗口出现如下错误信息:

Web deployment task failed.(Could not connect to the destination computer ("<server URL>") using the specified process

("The Web Management Service"). This can happen if a proxy server is interrupting communication with the destination server.

Disable the proxy server and try again.) ... The remote server returned an error: (502) Bad Gateway.

 

产生原因和解决方案

有可能是代理服务器问题,解决方法:打开控制面板或者Internet选项,选择连接选项卡,在Internet属性对话框里点击局域网设置,在局域网(LAN)设置对话框里在取消自动检测设置。然后重新发布。

如果问题依旧,联系你的管理员看看关于代理和防火墙可以做什么修改,因为Web Deploy为Web Management Service使用不标准的端口(8172),其它的连接Web Deploy 使用的是80端口。部署到第三方主机的时候一般使用的是Web Management Service。

 

默认.Net应用程序池不存在

场景

部署.NET Framework 4程序的时候,出现如下错误信息:

The default .NET 4.0 application pool does not exist or the application could not be added. Please verify that ASP.NET 4.0 is installed on this machine.

 

产生原因和解决方案

IIS上没有安装ASP.NET4,如果部署的服务器是你的开发机(安装了VS2010),ASP.NET4已经安装在服务器上了,但是没有安装在IIS上。要想成功部署,需要在Command Prompt窗口里运行如下命令在IIS里安装ASP.NET4:

cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru

你还要为默认应用程序池设置.NET framework版本,具体步骤请参考第5章。

 

Format of the initialization string does not conform to specification starting at index 0

场景

使用one-click发布以后,访问页面(需要读取数据库)的时候出现如下错误:

Format of the initialization string does not conform to specification starting at index 0.

 

产生原因和解决方案

打开部署站点的Web.config文件,看看数据库连接字符串是不是以$(ReplacableToken_开头,像下面这样:

<connectionStrings>
<add name="DefaultConnection" connectionString="$(ReplacableToken_DefaultConnection-Web.config Connection String_0)" providerName="System.Data.SqlServerCe.4.0"/>
<add name="SchoolContext" connectionString="$(ReplacableToken_SchoolContext-Web.config Connection String_0)" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>

 

如果是和上面一样,需要编辑项目文件,在PropertyGroup里添加如下属性:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>

 

然后重新部署

 

HTTP 500.21 Internal Server Error

场景

运行部署以后的站点,出现如下错误信息:

HTTP Error 500.21 - Internal Server Error. Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list.

 

产生原因和解决方案

程序需要ASP.NET4,但是IIS上没有注册ASP.NET4,注册ASP.NET4请在Command Prompt里运行如下代码:

cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru

你还要为默认应用程序池设置.NET framework版本,具体步骤请参考第5章。

 

不能打开App_Data目录下的SQL Server Express数据库

场景

为连接App_Data目录下的SQL Server Express数据库(.mdf文件),Web.config设置了连接字符串,第一次运行程序的时候出现如下错误:

System.Data.SqlClient.SqlException: Cannot open database "DatabaseName" requested by the login. The login failed.

 

产生原因和解决方案

在服务器上找不到任何叫该名称的SQL Server Express数据库(即便是以前删过同名的文件了,也不行),解决方案是给这个.mdf文件重命名一个从来没用过的名字,然后修改Web.config文件里的连接字符串。

 

 

Model Compatibility Cannot be Checked

场景

为连接App_Data目录下的SQL Server Express数据库(.mdf文件),Web.config设置了连接字符串,第一次运行程序的时候出现如下错误:

Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.

 

产生原因和解决方案

现有的数据库名字,曾经在本机存在,里面可能有表和数据,如果你有SQL Server Management Studio (SSMS)的话,可以通过它来删除,如果没有请问你的数据库取一个没用过的名字,然后修改Web.config文件里的连接字符串。

 

创建User和Role的时候出现SQL Error

场景

支持该脚本的时候失败,出现如下错误:

The approximate location of the error was between lines '1' and '3' of the script.

The verbose log may have more information about the error. The command started with:

CREATE USER [user2] FOR LOGIN [user2] WITH DEFAULT

Error: User does not have permission to perform this action.

 

产生原因和解决方案

运行SQL脚本的账户没有权限,一般提供商会给db_datareader, db_datawriter和 db_ddladmin角色,虽然可以创建大部分数据库对象,但是不能创建User和Role。要避免这个问题需要在数据库自动生成脚本的ProSource元素里添加如下属性:

CopyAllUsers=false, CopyAllRoles=false

如何编辑项目文件里的PreSource元素。请参看:Edit Deployment Settings in the Project File。如果你开发库里的User和Role需要部署在目标库,请联系你的提供商。

 

部署运行自定义脚本的时候出现SQL超时错误

场景

运行自定义脚本的时候出现超时错误:

 

产生原因和解决方案

在不同的事务里运行多个脚本的,默认情况下自动生成的脚本在一个事务,但是自定义脚本不在,如果你选择了Package/Publish SQL选项卡上的Pull data and/or schema from an existing database并且添加自定义SQL脚本的话,你必须在一些脚本上做一些事务的设置。详细信息请参考: How to: Deploy a Database With a Web Application Project

 

Stream Data of Site Manifest Is Not Yet Available

场景

使用deploy.cmd文件在t(Test)选项下安装package的时候,出现如下错误:

Error: The stream data of 'sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript' is not yet available.

 

产生原因和解决方案

该命令不能产生test report,如果在命令行输入y选项的话,可能没问题。注:该错误信息只在Test模式下才会出现。

 

程序需要ManagedRuntimeVersion v4.0

场景

尝试部署的时候,出现如下错误:

The application pool that you are trying to use has the 'managedRuntimeVersion' property set to 'v2.0'. This application requires 'v4.0'.

 

产生原因和解决方案

IIS上没有安装ASP.NET4,如果部署的服务器是你的开发机(安装了VS2010),ASP.NET4已经安装在服务器上了,但是没有安装在IIS上。要想成功部署,需要在Command Prompt窗口里运行如下命令在IIS里安装ASP.NET4:

cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –i



不能转化Microsoft.Web.Deployment.DeploymentProviderOptions

场景

部署一个package的时候,出现如下错误:

Unable to cast object of type 'Microsoft.Web.Deployment.DeploymentProviderOptions' to 'Microsoft.Web.Deployment.DeploymentProviderOptions'.

 

产生原因和解决方案

当你从IIS Manager 使用Web Deploy 1.1 UI 部署,但是Web Deploy 2.0也在上面安装了。如果使用IIS Remote Administration Tool来导入部署一个package,连接以后检查New Features Available对话框。(对话框有可能只在第一次连接的时候出现,想每次都出现,请关闭IIS Manager,通过inetmgr /reset重新开启)。如果Web Deploy UI里有一个Feature的版本号小于8的话,部署的服务器上可能同时都安装了Web Deploy 1.1和2.0版,如果客户端使用的版本是2.0的话,那服务器上也应该只安装Web Deploy 2.0。你可以联系提供商解决这个问题。

 

不能加载SQL Server Compact组件

场景

运行部署后的站点时,出现如下错误:

Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8482. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.

 

产生原因和解决方案

Bin目录下没有包含原生程序集的amd64和x86子目录, On a computer that has 如果电脑上安装SQL Server Compact 的话,那原生程序集是存放在C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private 目录的。最好的解决办法是在Visual Studio里安装NuGet SqlServerCompact包,该package有一个脚本可以复制原生程序集到amd64和x86子目录。当然,你也可以手工复制。更多信息,请参考第2章节。