2011-01-25 14 views
22

Sto testando un servizio REST in WCF su .net 4 - ovvero nessun file SVC. Funziona alla grande quando si esegue contro il server VS VS ma quando lo passo per funzionare contro IIS ottengo 404 quando cerco di sfogliare la pagina di aiuto o di colpire uno qualsiasi dei metodi di servizio.404 quando si esegue .net 4 Servizio WCF su IIS (nessun file svc)

Sono tornato a un servizio bare bones per farlo funzionare su IIS ma non sono sicuro di cosa non funzioni.

Il global.asax deve semplicemente

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

e il servizio stesso è così semplice come si arriva:

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

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

e configurazione del file di

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

Colpire l'/ help pagina o il metodo mi dà un 404.0.

Presumo che mi manca solo qualche impostazione in IIS per dare il via alla vita anche se è un po 'stupido che funzioni bene sul server di sviluppo ma non su IIS.

+0

quale versione di IIS? –

+0

7.5.7600 in esecuzione su W7. –

+0

Stai ricevendo un HTTP 404.4? In tal caso, verifica che i mapping del gestore siano corretti. – tomasmcguinness

risposta

27

Risolto dopo uno scavo intorno ad altri forum.

inizialmente ho aggiunto il seguente nel mio spazio web di configurazione:

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

Chiaramente per default IIS non sa cosa fare con le richieste senza estensione e li ha trasmessi al gestore di file statici.

Dato che MVC utilizza la stessa architettura di routine, ho calcolato che il modello di sito MVC di base deve avere una configurazione simile a quella riportata sopra poiché i miei siti MVC hanno funzionato correttamente quando sono stati spostati su IIS.

Si scopre che hanno una configurazione leggermente diversa e hanno la seguente voce al posto:

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

Entrambe le configurazioni sembrano funzionare bene, ma ho scelto di utilizzare il 2 ° opzione in questo caso.

+2

* runAllManagedModulesForAllRequests = "true" * è necessario se non hai applicato questo hotfix http://support.microsoft.com/kb/980368. Leggi di più qui http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-extensionless-urls-without-impacting-static -requests.aspx –

+0

Risolve questo problema installando "Configurazione consigliata di IIS 7" dal programma di installazione della piattaforma Web. –

+0

Sto impazzendo cercando di farlo funzionare e finalmente la tua risposta lo ha fatto. –

10

Avevo runAllManagedModulesForAllRequests="true" nel mio web.config ma non riuscivo ancora a superare il 404.0. Ho anche provato a installare "IIS 7 Recommended Configuration" senza fortuna. Rerunning aspnet_regiis ha risolto il problema.

  1. Nella finestra di dialogo Esegui, digitare cmd , e quindi fare clic su OK.

  2. Al prompt dei comandi, utilizzare il comando cd per modificare la directory della versione Aspnet_regiis.exe che si desidera utilizzare. Per impostazione predefinita, Aspnet_regiis.exe si trova nella seguente directory: systemroot \ Microsoft.NET \ Framework \ versionNumber

  3. Quindi eseguire il seguente comando: aspnet_regiis -ir

Questa registrerà "SVC -Integrated-4.0 "nei mapping degli handler.

+0

Questo ha risolto il mio problema. È anche possibile eseguire asp_regiis dal prompt dei comandi di Visual Studio (in Visual Studio Tools nel menu Start). –

0

Su IIS 5.1 sul mio computer, la pagina .svc è stata pubblicata solo quando ho aggiunto Gestore HTTP a livello di sito Web e livello di cartella virtuale. Questo dovrebbe idealmente funzionare per eredità!

Estensione: .svc

eseguibile:

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

0

HTTP 404 codice può essere restituito anche se non sono installati alcuni componenti di .NET Framework.

C'è per esempio funzione Windows Communication Foundation HTTP Activation in .NET Framework 3.5 e in .NET Framework 4.6 ci sono HTTP Activation, Message Queuing (MSMQ) Activation e pochi altri.

In Windows 10 queste funzionalità non sono installate di default, quindi ti preghiamo di dare un'occhiata a Windows Features.

Problemi correlati