404 при запуске службы .net 4 WCF в IIS (файл svc отсутствует) - PullRequest
22 голосов
/ 25 января 2011

Я тестирую REST-сервис в WCF на .net 4, т. Е. Нет файла SVC. Он отлично работает при работе с сервером VS dev, но когда я переключаю его на работу с IIS, я получаю 404 при попытке просмотреть страницу справки или нажать любой из методов обслуживания.

Я вернулся к сервису «голые кости», чтобы просто запустить его на IIS, но я не уверен, что с ним не так.

global.asax просто имеет

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(DataPortalService)));
    }

и сама услуга настолько проста, насколько это возможно:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DataPortalService : IDataPortalService
{
    [WebGet(UriTemplate = "Test/TestMethod")]
    public string TestMethod()
    {
        return "Hi!";
    }
}

[ServiceContract]
public interface IDataPortalService
{
    [OperationContract]
    string TestMethod();
}

и файл конфигурации

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>  

</configuration>

Попадание на страницу / справки или метод дает мне 404.0.

Полагаю, я просто пропускаю некоторые настройки в IIS, чтобы запустить их в жизнь, хотя немного глупо, что они отлично работают на сервере dev, но не в IIS.

Ответы [ 4 ]

29 голосов
/ 25 января 2011

Решено после раскопок на некоторых других форумах.

Я изначально добавил в свою веб-конфигурацию следующее:

<system.webServer>
    <handlers>
        <remove name="svc-Integrated-4.0" />
        <add name="svc-Integrated-4.0" path="*" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

Ясно, что по умолчанию IIS не знает, что делать сзапросы без расширений и передавали их статическому обработчику файлов.

Учитывая, что MVC использует ту же рутинную архитектуру, я решил, что базовый шаблон сайта MVC должен иметь некоторую конфигурацию, аналогичную описанной выше, поскольку мои сайты MVC имеютработал нормально при перемещении в IIS.

Оказывается, у них немного другой конфиг и вместо них есть следующая запись:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

Кажется, что обе конфигурации работают нормально, но я остановился на использовании2-й вариант в этом случае.

10 голосов
/ 28 марта 2012

У меня было runAllManagedModulesForAllRequests="true" в моем web.config, но я все еще не мог пройти 404.0. Также попытался установить «Рекомендованная конфигурация IIS 7», но безуспешно. Перезапуск aspnet_regiis решил проблему для меня.

  1. В диалоговом окне «Выполнить» введите cmd и нажмите кнопку ОК.

  2. В командной строке введите команду cd , чтобы изменить каталог версии Aspnet_regiis.exe, которую вы хотите использовать. По умолчанию Aspnet_regiis.exe находится в следующем каталоге: systemroot \ Microsoft.NET \ Framework \ versionNumber

  3. Затем выполните следующую команду: aspnet_regiis -ir

Это зарегистрирует «svc-Integrated-4.0» в сопоставлениях обработчиков.

1 голос
/ 13 июня 2016

HTTP 404 код может быть возвращен также, если у вас не установлены некоторые компоненты .NET Framework.

Например, в .NET Framework 3.5 есть функция Windows Communication Foundation HTTP Activation, а в .NET Framework 4.6 есть HTTP Activation, Message Queuing (MSMQ) Activation и некоторые другие.

В Windows 10 эти функцииустановлен по умолчанию, поэтому, пожалуйста, обратите внимание на Windows Features.

0 голосов
/ 25 июля 2014

В IIS 5.1 на моем компьютере страница .svc обслуживалась только тогда, когда я добавил обработчик HTTP на уровне веб-сайта, а также на уровне виртуальной папки. В идеале это должно работать по наследству!

Расширение: .svc

Исполняемый файл:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll

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