Файл поддержки службы WCF jsdebug не загружается
-
09-06-2019 - |
Вопрос
У меня есть служба WCF, которая вызывается из клиентского JavaScript.Вызов завершается с ошибкой Service is null JavaScript.Трассировка помощника WebDevelopment показывает, что вызовы для загрузки файла поддержки jsdebug приводят к ошибке 404 (файл не найден).
Перезапуск IIS, очистка файлов Temp ASP.Net или установка patch="false" в теге компиляции в web.config не решают проблему.
Из браузера
https://Myserver/MyApp/Services/MyService.svc отображает метаданные службы
однако
https://Myserver/MyApp/Services/MyService.svc/jsdebug результат 404.
Проблема, судя по всему, связана с протоколом https.С помощью http /jsdebug загружается вспомогательный файл JS.
Есть идеи?
ТИА
Решение
Догадаться!
Вот раздел конфигурации служб из web.config.
Посмотрите на атрибутbindingConfiguration в конечной точке.Значение «webBinding» указывает на тег привязки name="webBinding" в привязках, и это то, что сообщает службе использовать безопасность транспортного уровня по протоколу HTTPS.В моем случае значение атрибута было пустым, что привело к сбою запроса веб-службы к файлу /js или /jsdebug через HTTPS и выдаче ошибки 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>
Обратите внимание, что атрибутbindingConfiguration должен быть пустым (""), если доступ к службе осуществляется через http, а не https (при тестировании на локальном компьютере без сертификатов).
Надеюсь, это кому-то поможет.
Другие советы
Если после всей возможной работы вы по-прежнему получаете ту же ошибку.Просто добавьте «WCF-службу с поддержкой AJAX».
Для меня проблема заключалась в следующем;мы добавили MVC в решение с маршрутизацией.Наши услуги WCF не были проигнорированы.Я решил эту проблему, добавив следующее правило (где «WCF» — это папка, в которой мы храним наши сервисы).
routes.IgnoreRoute("WCF/{*pathInfo}");
Надеюсь, это сэкономит кому-то несколько часов.