web-dev-qa-db-fra.com

404 lors de l'exécution du service .net 4 WCF sur IIS (pas de fichier svc)

Je teste un service REST dans WCF sur .net 4 - c'est-à-dire sans fichier svc. Cela fonctionne très bien lorsque vous utilisez le serveur dev VS, mais lorsque je le bascule sur IIS, je reçois 404 en essayant de parcourir la page d’aide ou d’utiliser une des méthodes de service.

Je suis revenu à un service de base pour le faire fonctionner uniquement sur IIS, mais je ne suis pas sûr de ce qui ne va pas.

Le global.asax a simplement

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

et le service lui-même est aussi simple que possible:

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

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

et fichier de configuration de

<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>

Frapper la page/help ou la méthode me donne un 404.0. 

Je suppose qu'il me manque simplement un paramètre dans IIS pour lui donner vie, bien qu'il soit un peu stupide que cela fonctionne correctement sur le serveur de développement, mais pas dans IIS.

22
Chris W

Résolu après une fouille autour d'autres forums.

J'ai initialement ajouté ce qui suit à ma configuration Web:

<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>

Clairement, par défaut, IIS ne sait pas quoi faire avec les demandes sans extension et les transmet au gestionnaire de fichiers statiques.

Etant donné que MVC utilise la même architecture de routine, j'ai pensé que le modèle de site de base MVC doit avoir une configuration similaire à celle décrite ci-dessus, car mes sites MVC ont bien fonctionné lorsqu'ils ont été déplacés vers IIS.

Il se trouve qu’ils ont une configuration légèrement différente et qu’ils ont l’entrée suivante:

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

Les deux configurations semblent fonctionner correctement mais je me suis décidé à utiliser la deuxième option dans ce cas.

28
Chris W

J'avais runAllManagedModulesForAllRequests="true" dans mon web.config mais je ne pouvais toujours pas aller au-delà de 404.0. Également essayé d'installer "IIS 7 Recommended Configuration" sans aucune chance. Réexécuter aspnet_regiis m'a résolu le problème. 

  1. Dans la boîte de dialogue Exécuter, tapez cmd , puis cliquez sur OK.

  2. A l'invite de commande, utilisez la commande-cd pour modifier le répertoire de la version Aspnet_regiis.exe que vous souhaitez utiliser. Aspnet_regiis.exe se trouve par défaut dans le répertoire suivant: systemroot\Microsoft.NET\Framework\versionNumber

  3. Puis exécutez la commande suivante: aspnet_regiis -ir

Ceci enregistrera "svc-Integrated-4.0" dans les mappages de gestionnaires.

10
muruge

Le code HTTP 404 peut également être renvoyé si certains composants de .NET Framework ne sont pas installés. 

Il y a par exemple Windows Communication Foundation HTTP Activation caractéristique dans .NET Framework 3.5 et dans .NET Framework 4.6, il y a HTTP Activation, Message Queuing (MSMQ) Activation et quelques autres.

Sous Windows 10, ces fonctionnalités ne sont pas installées par défaut. N'oubliez donc pas de regarder Windows Features.

1
Landeeyo

Sur IIS 5.1 sur ma machine, la page .svc n'a été servie que lorsque j'ai ajouté le gestionnaire HTTP au niveau du site Web ainsi qu'au niveau du dossier virtuel. Cela devrait idéalement fonctionner par héritage!

Extension: .svc

Exécutable: 

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

0
user3876403