Não é possível servir serviços WCF no IIS no Windows 8


199

Quando tento servir um serviço WCF no IIS em uma máquina Windows 8, recebo o erro conhecido

A página que você está solicitando não pode ser exibida devido à configuração da extensão. Se a página for um script, adicione um manipulador. Se o arquivo precisar ser baixado, adicione um mapa MIME.

A solução alternativa anterior era executar, aspnet_regiis -imas esse comando parece ter sido preterido no Windows 8, gerando resposta This option is not supported on this version of the operating system. (...).

Qual seria o problema?

(Já habilitei aspxpáginas regulares com êxito , portanto a maioria das configurações do IIS parece íntegra.)


Para obter mais informações sobre o aspnet_regiis -icomando para usuários anteriores ao Windows 8, consulte este link: aspsnippets.com/Articles/…
David

Respostas:


406

Parecia um acéfalo; o serviço WCF deve ser ativado usando Programs and Features -> Turn Windows features on or offno painel de controle. Acesse .NET Framework Advanced Services -> WCF Servicese ative HTTP Activationconforme descrito nesta postagem no blog mdsn .

No prompt de comando (como administrador), você pode executar:

C:\> DISM /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation
C:\> DISM /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation45

Se você receber um erro, use o abaixo

C:\> DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation
C:\> DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation45

6
Passei um tempo procurando no Gerenciador do IIS. Acho que o Gerenciador do IIS deve ter um ícone direcionando ou informando o usuário sobre o .NET Framework Advnaced Services.
21773 Tony_Henrich

Usando o prompt de comando, recebi o erro "A operação está concluída, mas o recurso WCF-HTTP-Activation não estava ativado. Um recurso pai necessário pode não estar ativado. Você pode usar a opção / enable-feature / all para ativar automaticamente cada recurso pai da lista a seguir: Se os recursos pai já estiverem ativados, consulte o arquivo de log para obter mais diagnósticos. ". Em vez disso, usei o método GUI para saber o que estava ativando e funcionou.
Ben Adams

5
Eu tenho o mesmo "Um exigido recurso pai pode não estar habilitado" erro como Ben Anderson, e tentei a sugestão na mensagem de erro (adicionando o /allargumento), que, em seguida, funcionou bem: DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation45.
Troy Gizzi

1
Você é incrível. Você também pode adicionar (é um pequeno detalhe) que isso pode ser feito dependendo da versão do .Net Framework. Como em.NET 3.5 Framework Advanced Services -> Windows Communication Foundation HTTP Activation
rion18

Este é um salva-vidas. A maioria das soluções on-line para esse problema apenas habilita o .Net 3.5 Framework em recursos da Web. Isso não é suficiente. Você também precisa dar o passo mencionado aqui.
markaaronky

95

Para o Windows Server 2012, a solução é muito semelhante à do faester (veja acima). No Gerenciador do servidor, clique em Add roles and features, selecione o servidor apropriado e selecione Features. Abaixo .NET Framework 4.5 Features, você verá WCF Services, e abaixo disso, você encontrará HTTP Activation.


Obrigado por isso ! mas e quanto ao .Net 4? você acha que ativar esses recursos fará o mesmo com o .Net v4.0?
Aladdin Gallas

2
Em qualquer aplicativo Web existente, você também precisará fazer o seguinte após adicionar o recurso Windows: - Iniciar o inetmgr - Abrir "Mapeamentos de manipulador" - Verifique se os mapeamentos svc-ISAPI para a extensão * .svc estão presentes. Caso contrário, use a ação "Reverter para pai" para copiá-los do site pai. Observe que isso pressupõe que os mapeamentos de manipulador personalizados estejam configurados no web.config para o aplicativo, como é geralmente o caso no IIS7 +. Caso contrário, você os perderá ao executar "Reverter para o pai".
Berend Engelbrecht

13

Por favor, execute os dois passos seguintes no IIS 8.0

Adicionar novo tipo MIME e HttpHandler

  1. Extensão: .svc, tipo MIME: application / octet-stream

  2. Caminho da solicitação: * .svc, Tipo: System.ServiceModel.Activation.HttpHandler, Nome: svc-Integrated


Melhor solução para a minha antiga instalação do Windows 7 que falha ao ativar - .Net 3.5 (Ativação Http e não Http) e WAS. Muito delicado para reinstalar o sistema operacional
user919426

Vale a pena conhecer esse método, especialmente ao criar e adicionar seus próprios manipuladores. No entanto, se você usar 'ativar e desativar os recursos do Windows', obterá a maioria das extensões de arquivo conhecidas, o que poupará o tempo de adicionar cada uma individualmente (e descobrir todos os detalhes corretos)
Daniel Hollinrake


3

Essa é realmente a mesma solução que a solução de faester e a de Bill Moon, mas eis como você faz isso com o PowerShell:

Import-Module Servermanager
Add-WindowsFeature AS-HTTP-Activation

Obviamente, também não há nada que impeça você de ligar DISMdo PowerShell.


Muito agradável. Obrigado pela informação.
Rod Hartzell

-1

você pode adicionar esse código ao web.config no asp mvc

   <system.webServer>
    <staticContent>
      <remove fileExtension=".srt" />
      <mimeMap fileExtension=".srt" mimeType="text/srt" />
      <remove fileExtension=".vtt" />
      <mimeMap fileExtension=".vtt" mimeType="text/vtt" />
    </staticContent>
  </system.webServer>

você pode alterar a extensão do arquivo com sua extensão


Oi @malik - Você poderia esclarecer como o mapeamento de extensões de arquivo pode fazer o svc-endpoints funcionar?
faester

Se bem entendi, você pode alterar a extensão com o que você deseja. Você pode procurar em feedforall.com/mime-types.htm, mas diria outra coisa, desculpe, eu não consigo entender.
Malik masis 26/10/18
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.