it-swarm.com.de

404 bei laufendem .net 4 WCF-Dienst IIS (keine svc-datei)

Ich teste einen REST -Dienst in WCF auf .net 4 - d. H. Keine SVC-Datei. Es funktioniert hervorragend, wenn es gegen den VS dev-Server ausgeführt wird, aber wenn ich es gegen IIS wechsle, bekomme ich 404s, wenn ich versuche, die Hilfeseite zu durchsuchen oder eine der Servicemethoden zu treffen.

Ich bin zu einem nackten Knochen-Service zurückgefallen, um es einfach mit IIS zum Laufen zu bringen, aber ich bin mir nicht sicher, was daran falsch ist.

Das global.asax hat es einfach

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

und der Service selbst ist so einfach wie es nur geht:

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

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

und Konfigurationsdatei von

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

Wenn Sie die/help-Seite oder die Methode aufrufen, erhalten Sie eine 404.0. 

Ich vermute, ich vermisse einfach ein paar Einstellungen in IIS, um es zum Leben zu erwecken, obwohl es ein bisschen dumm ist, dass es auf dem Dev-Server gut funktioniert, aber nicht mit IIS.

22
Chris W

Nach einem Dig in einigen anderen Foren gelöst.

Ich habe meiner Web-Konfiguration zunächst Folgendes hinzugefügt:

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

Standardmäßig weiß IIS nicht, was mit den erweiterungslosen Anforderungen zu tun ist, und leitet sie an den statischen Dateihandler weiter.

Angesichts der Tatsache, dass MVC dieselbe Routinenarchitektur verwendet, stellte ich fest, dass die grundlegende MVC-Websitevorlage über eine Konfiguration verfügen muss, die der oben genannten ähnelt, da meine MVC-Sites beim Wechsel zu IIS einwandfrei funktionieren.

Es stellt sich heraus, dass sie eine etwas andere Konfiguration haben und stattdessen den folgenden Eintrag haben:

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

Beide Konfigurationen scheinen ok zu funktionieren, aber ich entschied mich für die zweite Option in diesem Fall.

28
Chris W

Ich hatte runAllManagedModulesForAllRequests="true" in meiner web.config, konnte aber trotzdem nicht an 404.0 vorbeikommen. Auch die Installation von "IIS 7 Recommended Configuration" wurde ohne Erfolg versucht. Erneutes Ausführen von aspnet_regiis hat das Problem für mich gelöst. 

  1. Geben Sie im Dialogfeld Ausführen den Befehl cmd ein, und klicken Sie auf OK.

  2. Verwenden Sie an der Eingabeaufforderung den Befehl cd , um das Verzeichnis der Version von Aspnet_regiis.exe zu ändern, die Sie verwenden möchten. Standardmäßig befindet sich Aspnet_regiis.exe im folgenden Verzeichnis: systemroot\Microsoft.NET\Framework\versionNumber

  3. Führen Sie dann den folgenden Befehl aus: aspnet_regiis -ir

Dadurch wird "svc-Integrated-4.0" in den Handler-Mappings registriert.

10
muruge

HTTP-404-Code kann auch zurückgegeben werden, wenn einige .NET Framework-Komponenten nicht installiert sind. 

Es gibt zum Beispiel Windows Communication Foundation HTTP Activation-Funktion in .NET Framework 3.5 und in .NET Framework 4.6 gibt es HTTP Activation, Message Queuing (MSMQ) Activation und ein paar mehr.

In Windows 10 werden diese Funktionen nicht standardmäßig installiert. Beachten Sie daher bitte Windows Features.

1
Landeeyo

Auf IIS 5.1 wurde die .svc-Seite auf meinem Computer nur dann bereitgestellt, wenn ich HTTP-Handler auf Website-Ebene sowie auf Ebene virtueller Ordner hinzugefügt habe. Dies sollte im Idealfall durch Vererbung funktionieren!

Erweiterung: .svc

Ausführbar: 

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

0
user3876403