Методы WCF возвращают ошибку 404, если в IIS6 включено сопоставление с подстановочными знаками

У меня есть служба REST WCF, определенная следующим образом:

[ServiceContract]
public interface IRest {
    [OperationContract]
    [WebGet(UriTemplate = "/test")]
    int Test();
}

Со следующим файлом web.config:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="ServiceX.RestBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="ServiceX.RestBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="false" />

  <services>
    <service behaviorConfiguration="ServiceX.RestBehavior"
      name="ServiceX.Rest">
      <endpoint address="" behaviorConfiguration="ServiceX.RestBehavior"
        binding="webHttpBinding" contract="ServiceX.IRest" />
    </service>
  </services>
</system.serviceModel>

Все работает без подстановочных знаков; Я могу перейти к '/services/rest.svc/test' и получу ожидаемый результат.

Однако, как только я включаю сопоставление с подстановочными знаками (. *> C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll), я начинаю получать сообщения 404 при попытке доступа к методу (хотя я все еще могу просмотреть '/services/rest.svc').

Любые идеи? Я исчерпал возможности Google и StackOverflow. Кажется, никто не разделяет эту проблему :(

РЕДАКТИРОВАТЬ: Вы все можете воспроизвести это, создав новую службу WCF в VS2008 (новый проект> Приложение службы WCF). Перейдите к фиктивному методу ('GetData') ... вы заметите, что он возвращает 400 ... это нормально, потому что он показывает, что он все еще пересылается в WCF. Однако если вы включите сопоставление с подстановочными знаками в IIS6, теперь вы получите 404, что означает, что WCF больше не перехватывает запрос.


person Lawrence    schedule 05.11.2010    source источник
comment
У меня такая же проблема с моим провайдером общего хостинга. Локально все работает нормально, но после загрузки я могу получить доступ только к странице информации о сервисе (/services/servicename.svc). Удалось ли это решить? Не могли бы вы подробнее рассказать о том, как воспроизвести это локально на моей машине?   -  person Slavo    schedule 28.12.2010


Ответы (2)


У меня была такая же проблема со службой WCF, работающей на IIS6.

Я мог просматривать службу на http://someurl/service.svc, но получал 404 при нажатии в службе, например http://someurl/service.svc/somemethod.

Исправить в моем случае было несложно. Тип файла .svc был настроен в IIS для обработки с помощью C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll, но моя служба работала в пуле приложений ASP.NET v4.0, поэтому я просто указал тип файла .svc, который будет обрабатываться C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll

person Tchami    schedule 01.03.2011

Во всплывающем диалоговом окне, в котором вы указываете путь для сопоставления с подстановочными знаками, есть флажок для параметра «Проверить, существует ли файл». Этот параметр необходимо отключить.

Если он не выключен, вы получите 404 (страница не найдена)

person Naraen    schedule 11.03.2011