Como script do IIS para entregar um recurso estático com um código de erro personalizado?

2

Eu tenho um IIS 8.5 executando um serviço RESTful ASP.NET 4.5 WCF como aplicativo no Windows Server 2012 R2.

Durante a manutenção do serviço, desejo que todas as solicitações para o Serviço WCF ( link ) resultem em um código de erro personalizado (por exemplo, 555) e uma resposta JSON estática (conteúdo estático e cabeçalho Content-Type correto). Como deveria haver alguma manutenção automaticamente disparada, seria ótimo se esse comportamento do IIS pudesse ser acionado por programação.

Você sabe se existe alguma maneira de fornecer temporariamente conteúdo JSON estático para uma URL específica (e todos os subcaminhos REST-ful , veja o URL do exemplo acima) e, adicionalmente, usar um código de erro 5xx personalizado (em vez de 200) como código de resposta HTTP?

    
por muffel 19.01.2015 / 09:07

1 resposta

2

Você está fazendo duas perguntas, como fazer isso e como roteirizar o que deseja fazer.

Eu não sei se é possível de sair da caixa, mas uma solução é usar o módulo IIS UrlRewrite , isso é muito útil para todos os tipos de coisas, então acho que é uma boa ideia tê-lo de qualquer maneira.

Crie uma nova regra que corresponda a todas as solicitações que você deseja tratar. No seu caso, path/service.svc/whatever/path , você pode usar expressões regulares para atender às suas solicitações. Use uma resposta personalizada e envie seu próprio código de status. No web.config você deve ter uma seção como esta:

<rewrite>
  <rules>
    <rule name="Json Redirect" stopProcessing="true">
      <match url="path/service.svc/whatever/path" />
      <action type="CustomResponse" statusCode="555" subStatusCode="0" statusReason="Nothing to see here" statusDescription="Temporary static json..." />
    </rule>
  </rules>
</rewrite>

Se você fizer isso, receberá o código de erro, mas não o seu json estático. Adicione uma nova entrada em system.webServer-httpErrors no web.config:

<error statusCode="555" subStatusCode="0" path="temp.json" responseMode="File" />

O responseMode = file significa que a localização do arquivo estático é relativa à sua raiz da web, no caso acima à direita na raiz do seu site.

Agora você precisa corrigir o tipo de conteúdo, adicionar uma entrada em system.webServer-staticContent no seu web.config:

<mimeMap fileExtension=".json" mimeType="text/json" />

Ao testar isso localmente, você ainda pode obter uma página de erro do IIS, mas chamando-a remotamente, deve funcionar.

Você pode fazer todas essas alterações na interface do usuário do gerenciador do IIS, mas se quiser gerá-las, consulte o Cmdlets IIS do PowerShell .

    
por 19.01.2015 / 10:28

Tags