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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top