Impossibile servire i servizi WCF in IIS su Windows 8


199

Quando provo a servire un servizio WCF su IIS in una macchina Windows 8, ottengo l'errore ben noto

La pagina richiesta non può essere pubblicata a causa della configurazione dell'estensione. Se la pagina è uno script, aggiungi un gestore. Se il file deve essere scaricato, aggiungi una mappa MIME.

La vecchia soluzione doveva essere eseguita, aspnet_regiis -ima questo comando sembra essere stato deprecato in Windows 8 producendo risposta This option is not supported on this version of the operating system. (...).

Quale sarebbe il lavoro in giro?

(Ho già abilitato correttamente le aspxpagine normali , quindi la maggior parte della configurazione di IIS sembra integra.)


Per ulteriori informazioni sul aspnet_regiis -icomando per utenti pre-Windows 8, consultare questo collegamento: aspsnippets.com/Articles/…
David

Risposte:


406

Sembrava un gioco da ragazzi; il servizio WCF deve essere abilitato usando Programs and Features -> Turn Windows features on or offnel Pannello di controllo. Vai a .NET Framework Advanced Services -> WCF Servicese abilita HTTP Activationcome descritto in questo post sul blog su mdsn .

Dal prompt dei comandi (come amministratore), è possibile eseguire:

C:\> DISM /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation
C:\> DISM /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation45

Se viene visualizzato un errore, utilizzare quanto segue

C:\> DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation
C:\> DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation45

6
Ho trascorso del tempo a cercare in Gestione IIS. Penso che IIS Manager dovrebbe avere un'icona che dirige o informa l'utente su .NET Framework Advnaced Services.
Tony_Henrich,

Utilizzando il prompt dei comandi ho ricevuto l'errore "L'operazione è completa ma la funzione di attivazione WCF-HTTP non è stata abilitata. Una funzione padre richiesta potrebbe non essere abilitata. È possibile utilizzare l'opzione / enable-feature / all per abilitare automaticamente ciascuna funzione parent dal seguente elenco. Se le funzioni principali sono già abilitate, fare riferimento al file di registro per ulteriori diagnosi. ". Ho usato invece il metodo GUI per sapere cosa stavo accendendo e ha funzionato.
Ben Adams,

5
Ho avuto la stessa "Una caratteristica necessaria associato non può essere attivata" errore come Ben Anderson, ed ho provato il suggerimento nel messaggio di errore (aggiungendo il /allragionamento), che poi ha funzionato bene: DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation45.
Troy Gizzi,

1
Signore, siete fantastici. Puoi anche aggiungere (è un piccolo dettaglio) che questo può essere fatto a seconda della versione di .Net Framework. Come in.NET 3.5 Framework Advanced Services -> Windows Communication Foundation HTTP Activation
rion18,

Questo è un salvavita. La maggior parte delle soluzioni online a questo problema consente solo di abilitare .Net 3.5 Framework nelle funzionalità Web. NON È ABBASTANZA. Devi anche fare il passo menzionato qui.
markaaronky,

95

Per Windows Server 2012, la soluzione è molto simile a quella dei faester (vedi sopra). Da Server Manager, fare clic su Add roles and features, selezionare il server appropriato, quindi selezionare Features. Sotto .NET Framework 4.5 Features, vedrai WCF Services, e sotto quello troverai HTTP Activation.


Grazie per questo ! ma che ne dici di .Net 4? pensi che abilitare queste funzionalità farà lo stesso per .Net v4.0?
Aladdin Gallas,

2
In qualsiasi applicazione web esistente dovrai anche fare quanto segue dopo aver aggiunto la funzione Windows: - Avvia inetmgr - Apri "Mapping gestori" - Controlla se sono presenti i mapping svc-ISAPI per l'estensione * .svc. In caso contrario, utilizzare l'azione "Ripristina padre" per copiarli dal sito Web padre. Si noti che ciò presuppone che i mapping dei gestori personalizzati siano configurati in web.config per l'applicazione, come di solito accade in IIS7 +. In caso contrario, perderai quelli durante l'esecuzione di "Ripristina genitore".
Berend Engelbrecht,

13

Effettuare le seguenti due operazioni su IIS 8.0

Aggiungi nuovo tipo MIME e HttpHandler

  1. Estensione: .svc, tipo MIME: application / octet-stream

  2. Percorso richiesta: * .svc, Tipo: System.ServiceModel.Activation.HttpHandler, Nome: svc-Integrated


La migliore soluzione per la mia installazione di Windows 7 molto vecchia che non riesce ad abilitare - .Net 3.5 (attivazione Http & Non-Http) e WAS. Troppo delicato per reinstallare il sistema operativo
user919426

Vale la pena conoscere questo metodo soprattutto quando si creano e si aggiungono i propri gestori. Tuttavia, se usi le funzioni di attivazione e disattivazione di Windows otterrai la maggior parte delle estensioni di file conosciute, che ti faranno risparmiare il tempo di aggiungerle singolarmente (e scoprire tutti i dettagli corretti)
Daniel Hollinrake,


3

Questa è davvero la stessa soluzione di Faester e di Bill Moon, ma ecco come lo fai con PowerShell:

Import-Module Servermanager
Add-WindowsFeature AS-HTTP-Activation

Ovviamente, non c'è nulla che ti impedisca di chiamare DISMda PowerShell.


Molto bella. Grazie per l'info.
Rod Hartzell,

-1

puoi aggiungere questo codice a web.config in asp mvc

   <system.webServer>
    <staticContent>
      <remove fileExtension=".srt" />
      <mimeMap fileExtension=".srt" mimeType="text/srt" />
      <remove fileExtension=".vtt" />
      <mimeMap fileExtension=".vtt" mimeType="text/vtt" />
    </staticContent>
  </system.webServer>

è possibile modificare l'estensione del file con l'estensione del file


Ciao @malik - Potresti chiarire come le estensioni dei file di mappatura potrebbero far funzionare gli svc-endpoint?
faester

se ho capito bene, puoi cambiare l'estensione con il tuo desiderato. Puoi guardare da feedforall.com/mime-types.htm ma diresti un'altra cosa, scusa se non riesco a capire.
malik masis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.