Подтвердить что ты не робот

404 при запуске .net 4 WCF-служба в IIS (без файла svc)

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

Я вернулся к сервису bare-костей, чтобы просто запустить его на 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>

Нажатие на страницу /help или метод дает мне 404.0.

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

4b9b3361

Ответ 1

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

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

<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

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

  • В диалоговом окне "Выполнить" введите cmd и нажмите "ОК".

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

  • Затем запустите следующую команду: aspnet_regiis -ir

Это приведет к регистрации "svc-Integrated-4.0" в сопоставлениях обработчиков.

Ответ 3

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

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

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

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

Ответ 4

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

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

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