2009-10-05 18 views
5

Ho bisogno di eseguire il debug di un servizio WCF ma è necessario avere un contesto HTTP.Come eseguire il debug di un servizio WCF con un contesto HTTP?

Attualmente ho una soluzione con un sito Web di servizio WCF, quando faccio clic su debug si avvia e quindi si accende una pagina HTML che non contiene alcun modulo di test.

Mentre il progetto è in esecuzione Ho provato a iniziare il WcfTestClient manualmente, quindi fornito l'indirizzo del mio servizio, si trova il servizio, ma quando invoco, esso ignora il livello di IIS (o server di sviluppo), in modo che il HttpContext è nullo ...

Qual è il modo corretto di eseguire il debug di un servizio WCF tramite un contesto IIS?

+0

è necessario aggiungere un attributo 'AspNetCompatibilityRequirements' sulla classe di servizio –

risposta

9

In WCF, HttpContext è impostato su NULL per impostazione predefinita e in base alla progettazione, anche se il servizio WCF è ospitato in IIS; dopo tutto, WCF è non ASP.NET.

Se effettivamente ha bisogno di un HttpContext, è necessario accenderlo separatamente, attraverso la configurazione (web.config se si ospita in IIS, la vostra applicazione di auto-host app.config altrimenti):

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

ed è necessario specificare questo fatto (che il servizio consente o addirittura si aspetta che la modalità di compatibilità ASP.NET), mettendo questo attributo sul tuo classe di servizio (che implementa l'appalto di servizi):

[AspNetCompatibilityRequirements 
(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]  
public class MyWCFService : IMyWCFService 
{ 
    ...... 
} 

RequirementsMode=Allowed solo sim ply consente la modalità di compatibilità ASP.NET, mentre in realtà lo richiede il RequirementsMode=Required e non funzionerà senza di esso.

Una volta eseguita questa operazione, è necessario ottenere il HttpContext.Current quando si collega il debugger al processo di lavoro IIS.

Marc

+0

Questa configurazione al web.config per l'applicazione iis? –

+0

sì, è dove risiede la tua altra configurazione WCF - nella sezione system.serviceModel. web.config in IIS o app.config della tua app auto-hosting. –

+0

riceve ora questo errore: il servizio non può essere attivato perché non supporta la compatibilità ASP.NET. La compatibilità ASP.NET è abilitata per questa applicazione. Disattivare la modalità di compatibilità di ASP.NET nel web.config o aggiungere l'attributo AspNetCompatibilityRequirements al tipo di servizio con l'impostazione RequirementsMode come 'Allowed' o 'Required'. –

1

È necessario allegare il debugger (Visual Studio) al processo di servizio IIS.

In Visual Studio, accedere a Debug -> Connetti per elaborare e selezionare il processo IIS nella finestra di dialogo Collega al processo.

Su IIS7, il nome del processo è w3wp.exe, ma potrebbe essere necessario selezionare i Mostra i processi di tutti gli utenti o Mostra processo in tutte le sessioni prima che diventi disponibile.

Quando il debugger è correttamente collegato al processo IIS, è possibile impostare uno o più punti di interruzione nel codice e richiamare il servizio.

+0

Qual è il nome del processo? –

+0

@JL: Modificato la mia risposta per includere il nome del processo. –

+0

Sfortunatamente non funziona, il punto di interruzione non è semplicemente soddisfatto. –

1

È necessario allegare al processo IIS, ovvero aspnet_wp.exe in XP e w3wp.exe nel server 2003. In questo modo si raggiungeranno i punti di interruzione ecc.

Se si sta cercando un modo per testare il servizio WCF, suggerirei di utilizzare WcfTestClient.

E ricorda che il processo IIS non verrà mostrato nel task manager finché non avrai colpito il server almeno una volta (ad esempio dopo un riavvio, dovrai colpire una pagina sul server almeno una volta per fare il inizio del processo).

+0

Non funziona. Il punto di interruzione semplicemente non è stato raggiunto, poiché WcfTestClient non ha un solo contesto http. Ho bisogno di un modo per testare con un httpContext valido. –

+0

Correzione, il punto di interruzione è soddisfatto, ma httpContext è sempre nullo –

1

Grazie per le soluzioni. Stavo ricevendo lo stesso problema. La mia soluzione sta funzionando bene ora con 2 file SVC.

al fine di risolvere il problema ho fatto due cambiamenti

Nel web.config ho commentato la linea

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

e

Aggiunto Attributo [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed) ] sulle classi che implementano le interfacce.

Problemi correlati