WebDAV pode causar erro 500 no TFS

imageSe você ativar o recurso de WebDAV do IIS no web site do seu Team Foundation Server, vai começar a encontrar problemas. Um sintoma típico é a mensagem com “500: error” acima ao tentar excluir um repositório Git.

TL;DR: O serviço do publicação WebDAV não deve ser ativado num site do TFS. Se você tiver ativado esse recurso, desative-o ou operações no TFS que dependam dos verbos HTTP controlados pelo WebDAV (como DELETE) não funcionarão.

Contexto

Um de nossos clientes estava encontrando problemas ao tentar apagar repositórios Git em seu TFS 2013. Sem conseguirmos identificar a causa, orientamos o cliente a abrir um chamado de suporte junto à Microsoft para investigar o motivo.

Durante a análise dos logs do IIS, o engenheiro de suporte percebeu que as requisições que usavam verbos HTTP além dos típicos GET e POST (como PUT e DELETE, comuns em APIs REST) falhavam consistentemente. Nesse momento, ele comentou que já havia histórico de outros casos de clientes com esse problema e que o culpado era o serviço de WebDAV do IIS. Dito e feito! Ao desligar o WebDAV, tudo volta a funcionar.

Bug no WebDAV?

Por que isso acontece? Tem algum problema no WebDAV, então? Não, não há nenhum bug. Apenas uma incompatibilidade com o TFS.

Agora, para entender o que houve, precisamos antes de mais nada saber o que é o WebDAV. De acordo com a Wikipédia (grifos meus):

Web Distributed Authoring and Versioning (WebDAV) is an extension of the Hypertext Transfer Protocol (HTTP) that allows clients to perform remote Web content authoring operations. A working group of the Internet Engineering Task Force (IETF) defined WebDAV in RFC 4918.

The WebDAV protocol makes the Web a readable and writable medium. It provides a framework for users to create, change and move documents on a server; typically a web server or web share.

Em outras palavras, e numa enorme simplificação: o WebDAV é um protocolo de transferência e gestão de arquivos – similar ao FTP – mas que opera sobre o HTTP. Ou seja, o WebDAV estende o HTTP com operações que permitem transformar um servidor Web num servidor de arquivos, sem precisar habilitar FTP para isso. Entre outros benefícios está a facilidade de operação através de firewalls, já que a comunicação se dá toda por HTTP.

Essa extensão do protocolo HTTP se dá através do manuseio dos verbos padrão HTTP e da inclusão de alguns novos, como PROPFIND, MOVE e COPY. Isso significa, por exemplo, que o verbo DELETE (usado pela API REST do TFS para apagar um repositório Git) tem um significado especial no WebDAV: serve para apagar um arquivo.

Com o WebDAV ativo no mesmo web site do TFS, ele intercepta essa chamada e tenta interpretá-la como um comando para apagar um arquivo. Como a requisição não segue o padrão WebDAV (afinal, ela é uma chamada a uma API do TFS) o servidor retorna uma mensagem de erro.

Desligando o WebDAV

A única alternativa, neste caso, é não usar WebDAV no site do TFS. Portanto, para desligar o WebDAV:

  1. Abra o IIS Manager no servidor (application tier) do TFS;
  2. Selecione o web site do TFS (“Team Foundation Server”);
  3. Localize o ícone WebDAV Authoring Rules e dê um duplo clique no ícone;
    Ícone WebDAV Authoring Rules
  4. Clique no link Disable WebDAV.
    Link Disable WebDAV

 

Um abraço,
Igor

Autor: Igor Abade

Igor Abade V. Leite ([email protected]) é Microsoft MVP (Most Valuable Professional) de Visual Studio ALM desde 2006. Palestrante em diversos eventos da comunidade de desenvolvimento de software (TechEd Brasil, The Developers’ Conference, DevOps Summit Brasil, Agile Brazil, Visual Studio Summit, QCON e outros), é também autor de artigos em revistas e sites como o MSDN Brasil. Desde março de 2011 é um dos sócios da Lambda3, uma consultoria especializada em ALM, desenvolvimento de software e treinamentos. Visite seu blog sobre VS ALM em http://www.tshooter.com.br/ e siga-o no Twitter @igorabade.

2 comentários em “WebDAV pode causar erro 500 no TFS”

Deixe seu comentário!