20/02/2015 | Autor: Igor Abade V. Leite | Categoria: Técnico | Comentários

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 >

**_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.

</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:

  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