Solucionar problemas de implantação da Web com o Visual Studio

Aplica-se a: Serviços de Informações da Internet

Este artigo ajuda você a solucionar uma série de erros ao tentar publicar do Visual Studio para um servidor que não foi configurado corretamente por meio da Implantação da Web. Embora o artigo seja escrito para versões específicas do produto, os conceitos também podem ser aplicados a versões mais recentes.

Para coletar as capturas de tela e os erros a seguir, use uma nova ASP.Net projeto MVC 3 no Visual Studio 2010 SP1. O servidor de destino foi um limpo instalação do Windows Server 2008 R2 SP1 com o IIS (Internet Information Services). Nenhuma outra configuração foi feita.

Não é possível se conectar ao servidor

O primeiro erro que você provavelmente encontrará será semelhante à captura de tela a seguir na janela de saída do Visual Studio. Para melhorar a legibilidade, o texto completo da mensagem é fornecido abaixo da captura de tela:

Captura de tela que mostra a saída da Lista de Erros no Visual Studio.

Web deployment task failed.(Could not connect to the destination computer ("deployserver").On the destination computer, make sure that Web Deploy is installed and that the required process("The Web Management Service") is started.)
This error indicates that you cannot connect to the server. Make sure the service URL is correct,firewall and network settings on this computer and on the server computer are configured properly,and the appropriate services have been started on the server.
Error details:
Could not connect to the destination computer ("deployserver"). On the destination computer,
make sure that Web Deploy is installed and that the required process
("The Web Management Service") is started.
Unable to connect to the remote server
A connection attempt failed because the connected party did not properly respond after a period
of time, or established connection failed because connected host has failed to respond 1.1.1.1:8172

O texto realçado neste erro (e os outros erros abaixo) é a chave para entender a natureza do problema. O Web Deploy não teve uma resposta do servidor, portanto, o Visual Studio não pode distinguir entre várias causas possíveis. Como resultado, ele fornece uma lista de coisas para tentar.

O serviço de gerenciamento Web está instalado?

No servidor do IIS, abra o Gerenciador dos Serviços de Informações da Internet (IIS) e selecione o nó nome do computador. Na exibição Recursos , role para baixo até a seção Gerenciamento e procure por esses ícones:

Captura de tela que mostra o ícone Permissões do Gerenciador do IIS, ícone Usuários do Gerenciador do IIS e ícone do Serviço de Gerenciamento.

Se eles não estiverem lá, você precisará instalar o Serviço de Gerenciamento por meio da caixa de diálogo Adicionar Serviços de Função . Ele também pode ser instalado por meio do Instalador da Plataforma Web na guia Produtos . Selecione Servidor na coluna à esquerda e selecione IIS: Serviço de Gerenciamento.

Observação

Depois de instalar o Serviço de Gerenciamento, você precisará iniciá-lo, pois ele não é iniciado automaticamente. Para fazer isso, clique duas vezes no ícone serviço de gerenciamento . Depois que o painel Serviço de Gerenciamento for exibido, selecione Iniciar no painel Ações à direita.

A URL de serviço está correta?

Por padrão, o Serviço de Gerenciamento Web escuta na porta 8172, mas isso pode ser alterado. A maneira mais fácil de marcar qual porta está sendo usada é abrir o painel serviço de gerenciamento, conforme descrito acima, e examinar as informações de IP e porta na seção Connections. Se a porta tiver sido alterada para algo diferente de 8172, você precisará garantir que a nova porta seja permitida por meio do firewall e atualizar a URL de serviço nas configurações de publicação do Visual Studio para usar a nova porta.

(403) Proibido

Depois que o Serviço de Gerenciamento Web for instalado, o Visual Studio poderá mostrar o seguinte erro:

Captura de tela que mostra a tela Lista de Erros no Visual Studio.

Web deployment task failed.(Could not connect to the destination computer ("deployserver") using
the specified process ("The Web Management Service") because the server did not respond.
Make sure that the process ("The Web Management Service") is started on the destination computer.)
Could not connect to the destination computer ("deployserver") using the specified process
("The Web Management Service") because the server did not respond. Make sure that the process
("The Web Management Service") is started on the destination computer.
The remote server returned an error: (403) Forbidden.

Esta mensagem é um pouco enganosa. Ele afirma que o servidor não respondeu, mas o erro 403 indica que a Implantação da Web poderia entrar em contato com o servidor, mas a solicitação foi recusada ativamente. O log HTTP do Serviço de Gerenciamento Web pode ajudar a confirmar se a solicitação chegou ao servidor e fornecer detalhes sobre a solicitação real que falhou. Esse log pode ser encontrado %SystemDrive%\Inetpub\logs\WMSvc por padrão. Como outros logs do IIS, os dados não são gravados no log imediatamente, portanto, você pode ter que esperar alguns minutos para ver a solicitação ou reiniciar o Serviço de Gerenciamento Web para liberar o log.

WMSVC No log, o erro mencionado acima se parece com o seguinte:

2011-06-02 17:59:05 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 403 6 5 1669

O 6 após o 403 no log é o código de sub-status e significa que o endereço IP foi rejeitado. Uma lista completa dos códigos status e sub-status do IIS pode ser encontrada em códigos HTTP status no IIS.

O Serviço de Gerenciamento está configurado para permitir conexões remotas?

Essa é a razão mais provável para a resposta 403.6. Clique duas vezes no ícone Serviço de Gerenciamento e verifique se a Connections Remota está marcada. Você deve parar o serviço para fazer alterações, portanto, certifique-se de reiniciá-lo quando terminar.

Captura de tela que mostra a caixa de diálogo Serviço de Gerenciamento.

O serviço de gerenciamento Web foi permitido por meio do Firewall do Windows?

Quando você instala o Serviço de Gerenciamento Web no servidor, uma regra de firewall de entrada é chamada de Serviço de Gerenciamento Web (HTTP Traffic-In). Verifique se essa regra está habilitada ao iniciar>o Firewall do Windows AdministrativeTools>com Segurança Avançada. Selecione Regras de Entrada e localize a regra de Gerenciamento Web na lista. Ele deve ser habilitado para todos os perfis.

Se você estiver usando um firewall de terceiros, precisará garantir que as conexões de entrada na porta 8172 sejam permitidas.

As restrições de IP foram configuradas para o Serviço de Gerenciamento?

O outro motivo comum para obter um erro 403 é se o serviço de gerenciamento tiver sido configurado para negar o IP do cliente. Por padrão, ele é configurado para permitir todos os IPs desde que conexões remotas sejam permitidas. Você pode marcar para restrições de IP clicando duas vezes no ícone do Serviço de Gerenciamento. Todas as regras de restrição de IP configuradas estão na parte inferior da página nas Restrições de Endereço IPv4.

(404) Não encontrado

Captura de tela que mostra a página Lista de Erros no Visual Studio. Os detalhes do erro estão em foco.

Web deployment task failed.(Could not connect to the destination computer ("deployserver").
On the destination computer, make sure that Web Deploy is installed and that the required process
("The Web Management Service") is started.
The requested resource does not exist, or the requested URL is incorrect.
Error details: Could not connect to the destination computer ("deployserver").
On the destination computer, make sure that Web Deploy is installed and that the required process
("The Web Management Service") is started.
The remote server returned an error: (404) Not Found.

O erro 404 indica que o Web Deploy foi capaz de entrar em contato com o Serviço de Gerenciamento Web no servidor, mas não conseguiu encontrar o que precisava. A primeira coisa a fazer é confirmar a qual recurso a Web Deploy tentou se conectar. Se você procurar no log do Serviço de Gerenciamento Web em %SystemDrive%\Inetpub\logs\WMSvc no servidor de destino, verá uma entrada no WMSVC log que se parece com a seguinte:

2011-05-12 15:21:50 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 404 7 0 1606

Msdeploy.axd é o manipulador para solicitações de Implantação da Web.

A Implantação da Web está instalada?

Você pode verificar se a Implantação da Web está instalada acessando o painel de controle Programas e Recursos e procurando o Microsoft Web Deploy 2.0 na lista de programas instalados. Se ele não estiver lá, você poderá instalá-lo por meio do Instalador da Plataforma Web acessando a guia Produtos . Ele está listado como Ferramenta de Implantação da Web 2.1. Você também deve garantir que o Serviço de Deployment Agent Web (MsDepSvc) esteja em execução.

O manipulador de implantação da Web está instalado?

Se a Implantação da Web estiver instalada e você ainda receber esse erro, verifique se o recurso Manipulador de Implantação do IIS 7 na Implantação da Web está instalado. No painel controle Programas e Recursos , localize o Microsoft Web Deploy 2.0, clique com o botão direito do mouse e selecione Alterar. No Assistente que aparece, selecione Avançar na primeira página e selecione Alterar na segunda página. Adicione Manipulador de Implantação do IIS 7 e tudo sob ele.

Captura de tela que mostra a caixa de diálogo Instalação do Microsoft Web Deploy 2 ponto 0. Estrutura de Implantação da Web está realçado.

Selecione Avançar para concluir o Assistente. Você precisa reiniciar o serviço de gerenciamento Web depois de fazer essa alteração.

(401) Não autorizado

Depois que a Implantação da Web e o Serviço de Gerenciamento Web estiverem configurados corretamente, você precisará configurar regras de delegação para permitir que os usuários atualizem o conteúdo. Para problemas de permissões, há vários erros diferentes que você pode ver no Visual Studio. Por exemplo:

Captura de tela que mostra a Lista de Erros no Visual Studio exibindo erros de problema de permissão.

Web deployment task failed.(Connected to the destination computer ("deployserver")
using the Web Management Service, but could not authorize.
Make sure that you are using the correct user name and password, that the site you are connecting
to exists, and that the credentials represent a user who has permissions to access the site.
Make sure the site name, user name, and password are correct. If the issue is not resolved,
please contact your local or server administrator.
Error details:
Connected to the destination computer ("deployserver") using the Web Management Service,
but could not authorize. Make sure that you are using the correct user name and password,
that the site you are connecting to exists, and that the credentials represent a user who
has permissions to access the site.
The remote server returned an error: (401) Unauthorized.

No log do WMSvc, você pode ver a seguinte mensagem:

2011-05-12 15:50:12 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 401 2 5 1653
2011-05-12 15:50:12 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 user1 192.168.0.203 - 401 1 1326 124

O http status realçado na saída do Visual Studio é um erro negado pelo Access. O win32 status realçado no log de erros mapeia para "Falha de logon: nome de usuário desconhecido ou senha ruim", portanto, esta é uma simples falha de logon. Se o usuário for autenticado, mas não tiver os direitos necessários para publicar, a entrada de log será semelhante à seguinte:

2011-05-12 15:55:38 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 401 2 5 0

Para permitir que esse usuário publique, você precisa configurar a delegação de acordo com as instruções em Configurar o Manipulador de Implantação da Web.

Operação não autorizada

Se a conta conseguir fazer logon, mas não tiver recebido os direitos necessários para publicar o conteúdo, você poderá ver a seguinte mensagem de erro:

Captura de tela que mostra a página Lista de Erros no Visual Studio exibindo um erro relacionado às permissões do usuário.

Web deployment task failed. (Unable to perform the operation ("Create Directory")  for the specified
directory ("bin"). This can occur if the server administrator has not authorized this operation for
the user credentials you are using.

O WMSvc log mostra respostas HTTP 200 para essas solicitações. Felizmente, o Web Deploy 2.1 também grava informações no log de serviços do Microsoft Web Deploy. Para exibi-lo, selecione Visualizador de Eventos (Local)>Aplicativos e Logs de Serviços>Microsoft Web Deploy.

Captura de tela que mostra o menu Visualizador de Eventos. O Microsoft Web Deploy está realçado.

Para este erro específico, o log de eventos contém detalhes extras (truncados para brevidade):

User: DEPLOYSERVER\User1
Client IP: 192.168.0.203
Content-Type: application/msdeploy
Version: 8.0.0.0
MSDeploy.VersionMin: 7.1.600.0
MSDeploy.VersionMax: 7.1.1070.1
MSDeploy.Method: Sync
MSDeploy.RequestId: 50de0746-f10d-4640-9b3d-4ba773520e38
MSDeploy.RequestCulture: en-US
MSDeploy.RequestUICulture: en-US
Skip: objectName="^configProtectedData$"
Provider: auto, Path: 
Tracing deployment agent exception. Request ID '50de0746-f10d-4640-9b3d-4ba773520e38'. Request Timestamp: '5/12/2011 9:18:12 AM'. Error Details:
Microsoft.Web.Deployment.DeploymentDetailedUnauthorizedAccessException: Unable to perform the operation ("Create Directory")
for the specified directory ("C:\inetpub\wwwroot\bin"). This can occur if the server administrator has not authorized this
operation for the user credentials you are using.
---> Microsoft.Web.Deployment.DeploymentException: The error code was 0x80070005. ---> System.UnauthorizedAccessException:
Access to the path 'C:\inetpub\wwwroot\bin' is denied.
   at Microsoft.Web.Deployment.Win32Native.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath)
   at Microsoft.Web.Deployment.DirectoryEx.CreateDirectory(String path)
   at Microsoft.Web.Deployment.DirPathProvider.CreateDirectory(String fullPath, DeploymentObject source)
   at Microsoft.Web.Deployment.DirPathProvider.Add(DeploymentObject source, Boolean whatIf)
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---

Esta mensagem informa onde as permissões precisam ser concedidas para esse erro específico. Você também pode ver o seguinte erro de permissões no Visual Studio:

Captura de tela que mostra a página Lista de Erros no Visual Studio com um erro de permissões em foco.

Web deployment task failed.((5/12/2011 11:31:41 AM) An error occurred when the request was processed on the remote computer.)

(5/12/2011 11:31:41 AM) An error occurred when the request was processed on the remote computer.
The server experienced an issue processing the request. Contact the server administrator for more information.

Esse erro em particular não lhe dá muito para continuar, mas a imagem fica mais clara se você olhar para o log de erros de Implantação da Web no Visualizador de Eventos.

User: DEPLOYSERVER\User1
Client IP: 192.168.0.203
Content-Type: application/msdeploy
Version: 8.0.0.0
MSDeploy.VersionMin: 7.1.600.0
MSDeploy.VersionMax: 7.1.1070.1
MSDeploy.Method: Sync
MSDeploy.RequestId: 63b2f3d1-1817-444f-8280-9fa4f6f85d53
MSDeploy.RequestCulture: en-US
MSDeploy.RequestUICulture: en-US
Skip: objectName="^configProtectedData$"
Provider: auto, Path: 
Tracing deployment agent exception. Request ID '63b2f3d1-1817-444f-8280-9fa4f6f85d53'. Request Timestamp: '5/12/2011 9:31:41 AM'. Error Details:
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
   at System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType type, String name, SafeHandle handle, SecurityInfos securityInformation, SecurityIdentifier owner, SecurityIdentifier group, GenericAcl sacl, GenericAcl dacl)
   at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
   at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, AccessControlSections includeSections, Object exceptionContext)
   at Microsoft.Web.Deployment.FileSystemSecurityEx.Persist(String path)
   at Microsoft.Web.Deployment.SetAclProvider.Add(DeploymentObject source, Boolean whatIf)
   at Microsoft.Web.Deployment.DeploymentObject.Update(DeploymentObject source, DeploymentSyncContext syncContext)
   at Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject)
   at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
   at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)

A partir dessa saída, podemos ver que User1 não tem os direitos de definir informações de segurança. Nesse caso, o usuário não tem "Modificar permissões" no conteúdo. Conceder "Permissões de alteração" ao conteúdo resolve o problema.

Outros

Se você não conseguir navegar por um aplicativo .NET 4.0 depois que ele tiver sido publicado com êxito, pode ser que o .NET 4.0 não tenha sido registrado corretamente com o IIS. Outros sintomas são que o .NET 4.0 está instalado, mas não há pools de aplicativos do .NET 4.0 ou mapeamentos de manipulador no IIS. Isso acontece quando o .NET 4.0 é instalado antes da instalação do IIS. Para corrigir esse problema, inicie um prompt de comando elevado e execute este comando:

%systemdrive%\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -iru

Mais informações