Методы WCF возвращают 404, когда сопоставление с подстановочными знаками включено в IIS6 - PullRequest
2 голосов
/ 05 ноября 2010

У меня есть служба 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 больше не перехватывает запрос.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

У меня только что была такая же проблема со службой 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

0 голосов
/ 11 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...