WebDAV pode causar erro 500 no TFS
Se 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. <table cellpadding="2" cellspacing="1" style="background-color: cornsilk; border: lightgray 1px solid;" border="0" > <tbody > <tr >
</tr> </tbody> </table>
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:
- Abra o IIS Manager no servidor (application tier) do TFS;
- Selecione o web site do TFS (“Team Foundation Server”);
- Localize o ícone WebDAV Authoring Rules e dê um duplo clique no ícone;
- Clique no link Disable WebDAV. Um abraço, Igor
20/02/2015 | Por Igor Abade V. Leite | Em Técnico | Tempo de leitura: 3 mins.