Compartilhar via


Implantando um aplicativo Web ASP.NET com SQL Server Compact usando o Visual Studio ou o Visual Web Developer: Solução de problemas (12 de 12)

por Tom Dykstra

Baixar o Projeto Inicial

Esta série de tutoriais mostra como implantar (publicar) um projeto de aplicativo Web ASP.NET que inclui um banco de dados SQL Server Compact usando o Visual Studio 2012 RC ou o Visual Studio Express RC 2012 para Web. Você também poderá usar o Visual Studio 2010 se instalar a Atualização de Publicação na Web. Para obter uma introdução à série, consulte o primeiro tutorial da série.

Para obter um tutorial que mostra os recursos de implantação introduzidos após o lançamento do RC do Visual Studio 2012, mostra como implantar SQL Server edições diferentes de SQL Server Compact e mostra como implantar em Sites do Windows Azure, consulte ASP.NET Implantação da Web usando o Visual Studio.

Esta página descreve alguns problemas comuns que podem surgir quando você implanta um aplicativo Web ASP.NET usando o Visual Studio. Para cada uma, uma ou mais causas possíveis e soluções correspondentes são fornecidas.

Erro do servidor no aplicativo '/' – As configurações de erro personalizadas atuais impedem que os detalhes do erro sejam exibidos remotamente

Cenário

Depois de implantar um site em um host remoto, você recebe uma mensagem de erro que menciona a configuração customErrors no arquivo Web.config, mas não indica qual foi a causa real do erro:

Server Error in '/' Application.
Runtime Error 

Description: An application error occurred on the server. The current custom error settings 
for this application prevent the details of the application error from being viewed remotely 
(for security reasons). It could, however, be viewed by browsers running on the local server 
machine. 

Details: To enable the details of this specific error message to be viewable on remote machines,
please create a <customErrors> tag within a "web.config" configuration file located in the
root directory of the current web application. This <customErrors> tag should then have its
"mode" attribute set to "Off".

Possível causa e solução

Por padrão, ASP.NET mostra informações detalhadas de erro somente quando seu aplicativo Web está em execução no computador local. Em geral, você não deseja exibir informações detalhadas de erro quando seu aplicativo Web está disponível publicamente pela Internet, pois os hackers podem ser capazes de usar essas informações para encontrar vulnerabilidades no aplicativo. No entanto, quando você está implantando um site ou atualizações em um site, às vezes algo vai dar errado e você precisa obter a mensagem de erro real.

Para permitir que o aplicativo exiba mensagens de erro detalhadas quando ele é executado no host remoto, edite o arquivo Web.config para desativar customErrors o modo, reimplantar o aplicativo e executar o aplicativo novamente:

  1. Se o aplicativo Web.config arquivo tiver um customErrors elemento no system.web elemento , altere o mode atributo para "desativado". Caso contrário, adicione um customErrors elemento no system.web elemento com o mode atributo definido como "off", conforme mostrado no exemplo a seguir:

    <configuration>
      <system.web>
        <customErrors mode="off"/>
      </system.web>
    </configuration>
    
  2. Implante o aplicativo.

  3. Execute o aplicativo e repita o que você fez anteriormente que causou a ocorrência do erro. Agora você pode ver qual é a mensagem de erro real.

  4. Quando você tiver resolvido o erro, restaure a configuração original customErrors e reimplante o aplicativo.

O acesso é negado em uma página da Web que usa SQL Server Compact

Cenário

Quando você implanta um site que usa SQL Server Compact e executa uma página no site implantado que acessa o banco de dados, você vê a seguinte mensagem de erro:

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

Possível causa e solução

A conta NETWORK SERVICE no servidor precisa ser capaz de ler binários nativos do SQL Service Compact que estão na pasta bin\amd64 ou bin\x86 , mas não tem permissões de leitura para essas pastas. Defina a permissão de leitura para NETWORK SERVICE na pasta bin , estendendo as permissões para subpastas.

Não é possível ler o arquivo de configuração devido a permissões insuficientes

Cenário

Quando você clica no botão Publicar do Visual Studio para implantar um aplicativo no IIS no computador local, a publicação falha e a janela Saída mostra uma mensagem de erro semelhante a esta:

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.

Possível causa e solução

Para usar a publicação com um clique no IIS em seu computador local, você deve estar executando o Visual Studio com permissões de administrador. Feche o Visual Studio e reinicie-o com permissões de administrador.

Não foi possível conectar-se ao computador de destino... Usando o processo especificado

Cenário

Quando você clica no botão Publicar do Visual Studio para implantar um aplicativo, a publicação falha e a janela Saída mostra uma mensagem de erro semelhante a esta:

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.

Possível causa e solução

Um servidor proxy está interrompendo a comunicação com o servidor de destino. No Painel de Controle do Windows ou na internet Explorer, selecione Opções da Internet e selecione a guia Conexões. Na caixa de diálogo Propriedades da Internet, clique em Configurações de LAN. Na caixa de diálogo Configurações de Rede local (LAN), desmarque a caixa de seleção Detectar configurações automaticamente . Em seguida, clique no botão publicar novamente.

Se o problema persistir, entre em contato com o administrador do sistema para determinar o que pode ser feito com configurações de proxy ou firewall. O problema ocorre porque a Implantação da Web usa uma porta não padrão para implantação do Serviço de Gerenciamento da Web (8172); para outras conexões, a Implantação da Web usa a porta 80. Quando você está implantando em um provedor de hospedagem de terceiros, você normalmente está usando o Serviço de Gerenciamento da Web.

O pool de aplicativos padrão do .NET 4.0 não existe

Cenário

Ao implantar um aplicativo que requer o .NET Framework 4, você verá a seguinte mensagem de erro:

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.

Possível causa e solução

ASP.NET 4 não está instalado no IIS. Se o servidor no qual você está implantando for o computador de desenvolvimento e tiver o Visual Studio 2010 instalado nele, ASP.NET 4 será instalado no computador, mas talvez não esteja instalado no IIS. No servidor no qual você está implantando, abra um prompt de comandos com privilégios elevados e instale ASP.NET 4 no IIS executando os seguintes comandos:

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

Talvez você também precise definir manualmente a versão .NET Framework do pool de aplicativos padrão. Para obter mais informações, consulte o tutorial Implantando no IIS como um ambiente de teste .

O formato da cadeia de caracteres de inicialização não está em conformidade com a especificação começando no índice 0.

Cenário

Depois de implantar um aplicativo usando uma publicação com um clique, ao executar uma página que acessa o banco de dados, você recebe a seguinte mensagem de erro:

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

Possível causa e solução

Abra o arquivo Web.config no site implantado e marcar para ver se os valores da cadeia de conexão começam com $(ReplaceableToken_, como no exemplo a seguir:

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

Se as cadeias de conexão se parecerem com este exemplo, edite o arquivo de projeto e adicione a seguinte propriedade ao PropertyGroup elemento que é para todas as configurações de build:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>

Em seguida, reimplante o aplicativo.

Erro interno do servidor HTTP 500

Cenário

Ao executar o site implantado, você verá a seguinte mensagem de erro sem informações específicas indicando a causa do erro:

HTTP Error 500 - Internal Server Error.

Possível causa e solução

Há muitas causas de 500 erros, mas uma causa possível se você estiver seguindo esses tutoriais é que você colocou um elemento XML no lugar errado em um dos arquivos de transformação XML. Por exemplo, você obteria esse erro se colocasse a transformação em que insere um <location> elemento <system.web> em vez de diretamente em <configuration>. Nesse caso, a solução é corrigir o arquivo de transformação XML e reimplantar.

Erro interno do servidor HTTP 500.21

Cenário

Ao executar o site implantado, você verá a seguinte mensagem de erro:

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

Possível causa e solução

O site que você implantou tem destinos ASP.NET 4, mas ASP.NET 4 não está registrado no IIS no servidor. No servidor, abra um prompt de comandos com privilégios elevados e registre ASP.NET 4 executando os seguintes comandos:

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

Talvez você também precise definir manualmente a versão .NET Framework do pool de aplicativos padrão. Para obter mais informações, consulte o tutorial Implantando no IIS como um ambiente de teste .

Falha no logon ao abrir SQL Server Express banco de dados no App_Data

Cenário

Você atualizou a cadeia de conexão de arquivoWeb.configpara apontar para um banco de dados SQL Server Express como um arquivo .mdf na pasta App_Data e, na primeira vez que executar o aplicativo, verá a seguinte mensagem de erro:

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

Possível causa e solução

O nome do arquivo .mdf não pode corresponder ao nome de nenhum banco de dados SQL Server Express que já existiu no computador, mesmo que você tenha excluído o arquivo .mdf do banco de dados existente anteriormente. Altere o nome do arquivo .mdf para um nome que nunca foi usado como um nome de banco de dados e altere o arquivo Web.config para usar o novo nome. Como alternativa, você pode usar o SQL Server Management Studio Express para excluir bancos de dados SQL Server Express existentes anteriormente.

Não é possível verificar a compatibilidade do modelo

Cenário

Você atualizou a cadeia de conexão de arquivoWeb.configpara apontar para um novo banco de dados SQL Server Express e, na primeira vez que executar o aplicativo, verá a seguinte mensagem de erro:

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

Possível causa e solução

Se o nome do banco de dados que você colocou no arquivo de Web.config já tiver sido usado no computador, um banco de dados já poderá existir com algumas tabelas nele. Selecione um novo nome que não tenha sido usado no computador antes e altere o arquivo Web.config para apontar para usar esse novo nome de banco de dados. Como alternativa, você pode usar SQL Server Management Studio Express para excluir o banco de dados existente.

Erro sql quando um script tenta criar usuários ou funções

Cenário

Você está usando a implantação de banco de dados configurada na guia Pacote/Publicar SQL , scripts SQL executados durante a implantação incluem comandos Criar Usuário ou Criar Função e a execução de script falha quando esses comandos são executados. Você pode ver mensagens mais detalhadas, como as seguintes:

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.

Se esse erro ocorrer quando você tiver configurado a implantação de banco de dados no assistente Publicar Web em vez da guia PACOTE/Publicar SQL , crie um thread no fórum de Configuração e Implantação e a solução será adicionada a esta página de solução de problemas.

Possível causa e solução

A conta de usuário que você está usando para executar a implantação não tem permissão para criar usuários ou funções. Por exemplo, a empresa de hospedagem pode atribuir as db_datareaderfunções , db_datawritere db_ddladmin à conta de usuário que ela configura para você. Eles são suficientes para criar a maioria dos objetos de banco de dados, mas não para criar usuários ou funções. Uma maneira de evitar o erro é excluindo usuários e funções da implantação do banco de dados. Você pode fazer isso editando o PreSource elemento para o script gerado automaticamente do banco de dados para que ele inclua os seguintes atributos:

CopyAllUsers=false, CopyAllRoles=false

Para obter informações sobre como editar o PreSource elemento no arquivo de projeto, consulte Como editar configurações de implantação no arquivo de projeto. Se os usuários ou funções no banco de dados de desenvolvimento precisarem estar no banco de dados de destino, entre em contato com o provedor de hospedagem para obter assistência.

SQL Server erro de tempo limite ao executar scripts personalizados durante a implantação

Cenário

Você especificou scripts SQL personalizados a serem executados durante a implantação e, quando a Implantação da Web os executa, eles atingiram o tempo limite.

Causa e solução possíveis

A execução de vários scripts que têm modos de transação diferentes pode causar erros de tempo limite. Por padrão, os scripts gerados automaticamente são executados em uma transação, mas os scripts personalizados não. Se você selecionar a opção Extrair dados e/ou esquema de um banco de dados existente na guia Pacote/Publicar SQL e, se você adicionar um script SQL personalizado, deverá alterar as configurações de transação em alguns scripts para que todos os scripts usem as mesmas configurações de transação. Para obter mais informações, consulte Como implantar um banco de dados com um projeto de aplicativo Web.

Se você tiver definido as configurações de transação para que todas sejam iguais, mas ainda receberem esse erro, uma possível solução alternativa será executar os scripts separadamente. Na grade Scripts de Banco de Dados na guia Pacote/Publicar SQL, desmarque a caixa Incluir marcar para o script que causa o erro de tempo limite e publique o projeto. Em seguida, volte para a grade Scripts de Banco de Dados, selecione a caixa Incluir marcar do script e desmarque as caixas Incluir marcar para os outros scripts. Em seguida, publique o projeto novamente. Desta vez, quando você publica, somente o script personalizado selecionado é executado.

Os dados de fluxo do manifesto do site ainda não estão disponíveis

Cenário

Ao instalar um pacote usando o arquivo deploy.cmd com a opção t (teste), você verá a seguinte mensagem de erro:

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

Causa e solução possíveis

A mensagem de erro significa que o comando não pode produzir um relatório de teste. No entanto, o comando poderá ser executado se você usar a opção y (instalação real). A mensagem indica apenas que há um problema ao executar o comando no modo de teste.

Este aplicativo requer ManagedRuntimeVersion v4.0

Cenário

Ao tentar implantar, você verá a seguinte mensagem de erro:

Erro: os dados de fluxo de 'sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript' ainda não estão disponíveis. O pool de aplicativos que você está tentando usar tem a propriedade 'managedRuntimeVersion' definida como 'v2.0'. Esse aplicativo requer 'v4.0'.

Causa e solução possíveis

ASP.NET 4 não está instalado no IIS. Se o servidor no qual você está implantando for seu computador de desenvolvimento e tiver o Visual Studio 2010 instalado nele, ASP.NET 4 será instalado no computador, mas pode não estar instalado no IIS. No servidor no qual você está implantando, abra um prompt de comando com privilégios elevados e instale ASP.NET 4 no IIS executando os seguintes comandos:

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

Não é possível converter Microsoft.Web.Deployment.DeploymentProviderOptions

Cenário

Ao implantar um pacote, você verá a seguinte mensagem de erro:

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

Causa e solução possíveis

Você está tentando implantar do Gerenciador do IIS usando a interface do usuário da Implantação da Web 1.1 em um servidor que tenha a Implantação da Web 2.0 instalada. Se você estiver usando a Ferramenta de Administração Remota do IIS para implantar importando um pacote, marcar a caixa de diálogo Novos Recursos Disponíveis ao estabelecer a conexão. (Essa caixa de diálogo só pode ser mostrada uma vez quando a conexão é estabelecida pela primeira vez. Para limpar a conexão e recomeçar, feche o Gerenciador do IIS e inicie-o novamente inserindo inetmgr /reset no prompt de comando.) Se um dos recursos listados for a interface do usuário de implantação da Web e tiver um número de versão inferior a 8, o servidor no qual você está implantando poderá ter as versões 1.1 e 2.0 da Implantação da Web instaladas. Para implantar a partir de um cliente que tenha o 2.0 instalado, o servidor deve ter apenas a Implantação da Web 2.0 instalada. Você precisará entrar em contato com seu provedor de hospedagem para resolve esse problema.

Não é possível carregar os componentes nativos do SQL Server Compact

Cenário

Ao executar o site implantado, você verá a seguinte mensagem de erro:

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.

Causa e solução possíveis

O site implantado não tem subpastas amd64 e x86 com os assemblies nativos nelas na pasta bin do aplicativo. Em um computador que tenha SQL Server Compact instalado, os assemblies nativos estão localizados em C:\Arquivos de Programas\Microsoft SQL Server Compact Edition\v4.0\Private. A melhor maneira de colocar os arquivos corretos nas pastas corretas em um projeto do Visual Studio é instalar o pacote NuGet SqlServerCompact. A instalação do pacote adiciona um script pós-build para copiar os assemblies nativos para amd64 e x86. No entanto, para que elas sejam implantadas, você precisa incluí-las manualmente no projeto. Para obter mais informações, consulte o tutorial Implantando SQL Server Compact.

Erro "O caminho não é válido" depois de implantar um aplicativo Entity Framework Code First

Cenário

Você implanta um aplicativo que usa Migrações do Entity Framework Code First e um DBMS, como SQL Server Compact que armazena seu banco de dados em um arquivo na pasta App_Data. Você Migrações do Code First configurado para criar o banco de dados após sua primeira implantação. Ao executar o aplicativo, você recebe uma mensagem de erro como o seguinte exemplo:

The path is not valid. Check the directory for the database. [Path = c:\inetpub\wwwroot\App_Data\DatabaseName.sdf ]

Causa e solução possíveis

O Code First está tentando criar o banco de dados, mas a pasta App_Data não existe. Você não tinha arquivos na pasta App_Data quando implantou ou selecionou Excluir App_Data na guia Pacote/Publicar Web da janela Propriedades do Projeto . O processo de implantação não criará uma pasta no servidor se não houver nenhum arquivo na pasta a ser copiado para o servidor. Se você já tiver configurado o banco de dados no site, o processo de implantação excluirá os arquivos e a própria pasta App_Data se você selecionou Remover arquivos adicionais no destino no perfil de publicação. Para resolver o problema, coloque um arquivo de espaço reservado, como um arquivo .txt na pasta App_Data , verifique se você não tem Excluir App_Data selecionado e reimplantar.

"O objeto COM que foi separado de seu RCW subjacente não pode ser usado."

Cenário

Você tem usado com êxito a publicação com um clique para implantar seu aplicativo e, em seguida, começa a receber este erro:

Web deployment task failed. (Could not complete the request to remote agent URL 'https://serverurl.com/msdeploy.axd?site=sitename'.)
Could not complete the request to remote agent URL 'https://url/msdeploy.axd?site=sitename'.
The request was aborted: The request was canceled.
COM object that has been separated from its underlying RCW cannot be used.

Causa e solução possíveis

Fechar e reiniciar o Visual Studio geralmente é tudo o que é necessário para resolve esse erro.

Falha na implantação porque as credenciais de usuário usadas para publicação não têm a autoridade setACL

Cenário

A publicação falha com um erro que indica que você não tem autoridade para definir permissões de pasta (a conta de usuário que você está usando não tem autoridade setACL).

Causa e solução possíveis

Por padrão, o Visual Studio define permissões de leitura na pasta raiz do site e permissões de gravação na pasta App_Data. Se você souber que as permissões padrão nas pastas do site estão corretas e não precisam ser definidas, desabilite esse comportamento adicionando <IncludeSetACLProviderOn Destination>False</IncludeSetACLProviderOnDestination ao arquivo de perfil de publicação> (para afetar um único perfil) ou ao arquivo wpp.targets (para afetar todos os perfis). Para obter informações sobre como editar esses arquivos, consulte Como editar configurações de implantação em arquivos de perfil (.pubxml).

Erros de acesso negado quando o aplicativo tenta gravar em uma pasta de aplicativo

Cenário

O aplicativo errou ao tentar criar ou editar um arquivo em uma das pastas do aplicativo, pois ele não tem autoridade de gravação para essa pasta.

Causa e solução possíveis

Por padrão, o Visual Studio define permissões de leitura na pasta raiz do site e permissões de gravação na pasta App_Data. Se o aplicativo precisar de acesso de gravação a uma subpasta, você poderá definir permissões para essa pasta, conforme mostrado nos tutoriais Configurando Permissões de Pasta e Implantando no Ambiente de Produção . Se o aplicativo precisar de acesso de gravação à pasta raiz do site, você precisará impedi-lo de definir o acesso somente leitura na pasta raiz adicionando <IncludeSetACLProviderOn Destination>False</IncludeSetACLProviderOnDestination ao arquivo de perfil de publicação> (para afetar um único perfil) ou ao arquivo wpp.targets (para afetar todos os perfis). Para obter informações sobre como editar esses arquivos, consulte Como editar configurações de implantação em arquivos de perfil (.pubxml).

Erro de configuração – o atributo targetFramework faz referência a uma versão posterior à versão instalada do .NET Framework

Cenário

Você publicou com êxito um projeto Web direcionado ASP.NET 4.5, mas ao executar o aplicativo (com o customErrors modo definido como "desativado" no arquivo Web.config), você recebe o seguinte erro:

The 'targetFramework' attribute in the <compilation> element of the Web.config 
file is used only to target version 4.0 and later of the .NET Framework (for 
example, '<compilation targetFramework="4.0">'). The 'targetFramework' attribute 
currently references a version that is later than the installed version of the 
.NET Framework. Specify a valid target version of the .NET Framework, or install 
the required version of the .NET Framework.

A caixa Erro de Origem da página de erro realça a seguinte linha de Web.config como a causa do erro:

<compilation targetFramework="4.5" />

Causa e solução possíveis

O servidor não dá suporte ao ASP.NET 4.5. Entre em contato com o provedor de hospedagem para determinar quando e se o suporte para ASP.NET 4.5 pode ser adicionado. Se a atualização do servidor não for uma opção, você precisará implantar um projeto Web direcionado ASP.NET 4 ou anterior. Se você implantar um projeto Web ASP.NET 4 ou anterior no mesmo destino, selecione a caixa Remover arquivos adicionais no destino marcar na guia Configurações do assistente Publicar Web. Se você não selecionar Remover arquivos adicionais no destino, continuará a obter a página Erro de Configuração.

As janelas propriedades do projeto incluem uma lista suspensa estrutura de destino, mas você não pode resolve esse problema apenas alterando-o de .NET Framework 4.5 para .NET Framework 4. Se você alterar a estrutura de destino para uma versão de estrutura anterior, o projeto ainda terá referências aos assemblies da versão da estrutura posterior e não será executado. Você precisa alterar manualmente essas referências ou criar um novo projeto direcionado .NET Framework 4 ou anterior. Para obter mais informações, consulte .NET Framework Direcionamento para Sites.