O arquivo de suporte do serviço WCF jsdebug falha ao carregar
-
09-06-2019 - |
Pergunta
Eu tenho um serviço WCF que é chamado de JavaScript do lado do cliente.A chamada falha com um erro de JavaScript Service is null.O rastreamento auxiliar do WebDevelopment mostra que as chamadas para carregar o arquivo de suporte jsdebug resultam em um erro 404 (arquivo não encontrado).
Reiniciar o IIS ou limpar os arquivos Temp ASP.Net ou definir batch="false" na tag de compilação em web.config não resolve o problema
Do navegador
https://Myserver/MyApp/Services/MyService.svc exibe os metadados do serviço
no entanto
https://Myserver/MyApp/Services/MyService.svc/jsdebug resulta em um 404.
O problema parece estar no protocolo https.Com http/jsdebug baixa o arquivo JS de suporte.
Alguma ideia?
TIA
Solução
Descobri!
Aqui está a seção de configuração de serviços do web.config
Observe o atributo bindingConfiguration no endpoint.O valor "webBinding" aponta para a tag de ligação name="webBinding" nas ligações e é isso que diz ao serviço para usar segurança de nível de transporte em HTTPS.No meu caso, o valor do atributo estava vazio, fazendo com que a solicitação de serviço da web para o arquivo /js ou /jsdebug por HTTPS falhasse e gerasse um erro 404.
<services>
<service name="MyService">
<endpoint address="" behaviorConfiguration="MyServiceAspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" contract="Services.MyService" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport">
</security>
</binding>
</webHttpBinding>
</bindings>
Observe que o atributo bindingConfiguration deve estar vazio ("") se o serviço for acessado via http em vez de https (ao testar em máquina local sem certificados)
Espero que isso ajude alguém.
Outras dicas
Se você ainda receber o mesmo erro depois de todo o seu trabalho possível.Basta adicionar um "Serviço WCF habilitado para AJAX".
Para mim, o problema era o seguinte;adicionamos MVC a uma solução com roteamento.Nossos serviços WCF não estavam sendo ignorados.Resolvi isso adicionando a seguinte regra (onde "WCF" é a pasta em que mantemos nossos serviços).
routes.IgnoreRoute("WCF/{*pathInfo}");
Espero que isso economize algumas horas para alguém.