Вопрос

У меня есть служба 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}");

Надеюсь, это сэкономит кому-то несколько часов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top