2009-08-20 10 views
14

Ho un servizio di test WCF e un client di test nella stessa soluzione. Il servizio è configurato per l'esecuzione su localhost (Ie, "http://localhost:8731/Design_Time_Addresses/MyService/Service"). Eseguo l'app client e richiama correttamente il servizio e ottiene la risposta corretta. Ho verificato tramite i registri che è sicuramente in esecuzione il servizio che è locale alla mia macchina. Tuttavia, non riesco a eseguire il debug nel servizio durante l'esecuzione del client. WCF dovrebbe consentire solo un passaggio, ma nessun punto di interruzione del servizio viene colpito, e anche il passaggio alla chiamata di servizio non funziona. Qualcuno ha mai visto questo?WCF non può più accedere a un servizio ospitato localmente, perché no?

Ho controllato tutte le cose ovvie come "è stato generato il file PDB?" -- sì. Se eseguo il progetto di servizio da solo, poi lo colpisco con un client di prova, i punti di interruzione vengono colpiti correttamente. Quindi il debug sul servizio funziona. Posso anche "associare esplicitamente al processo remoto" e eseguire il debug del servizio in questo modo. Ma WCF non passerà automaticamente dal client al servizio.

+0

come si ospita il servizio WCF? Servizio di Windows? IIS? –

+0

No, è in esecuzione localmente all'interno della stessa soluzione tramite Visual Studio. IE, http: // localhost: 8731/Design_Time_Addresses/MyService/Service – tavistmorph

+0

Assicurati di utilizzare l'endpoint corretto quando imposti il ​​proxy. Ho passato solo un'ora a capire che stavo indicando un endpoint che non ho in sviluppo. – Trevor

risposta

3

Si sta utilizzando la funzionalità di hosting del servizio WCF automatico in Visual Studio? È possibile verificarlo aprendo le proprietà del progetto del progetto di servizio WCF e navigando nella scheda Opzioni WCF. Avvia l'host del servizio WCF quando si esegue il debug di un altro progetto nella stessa casella di controllo selezionata? Se lo è, allora questo spiega il problema.

Quello che succede è che quando si esegue il client, viene creato un processo separato per ospitare automaticamente il servizio WCF. Poiché si tratta di un processo separato, non sarai in grado di "eseguirlo" durante il debug del tuo client. Dovrai eseguire due sessioni di debug separate, una per il tuo servizio e una per il tuo client.

Un modo semplice per eseguire questa operazione è effettuare una chiamata a System.Diagnostics.Debugger.Break() nella logica di avvio del servizio. Quando il servizio viene avviato automaticamente dall'host del servizio WCF, verrà richiesto di eseguirne il debug, consentendo di aprire una seconda istanza di Visual Studio per la sua sessione di debug.

+0

Penso che ciò si applicherebbe solo se il servizio WCF è auto-ospitato, il che significherebbe NON all'interno di IIS, del server VS Dev o dell'host del servizio WCF. O più semplicemente, ciò che l'OP sta chiedendo di solito funziona "immediatamente" in una soluzione con un progetto WCF - puoi semplicemente intervenire. – msulis

19

Anche questo è successo. Curiosamente sembra che accada dopo aver apportato modifiche alla configurazione della build (da x64 a x86). Ecco come sono stato in grado di risolverlo:

  1. Fare clic con il tasto destro del mouse sulla soluzione, selezionare Proprietà.
  2. In "Progetto di avvio" passare da "Progetto di avvio singolo" a "Progetti di avvio multipli".
  3. Impostare Azione su "Avvia" per il progetto WCF.

Anche se sto ospitando il progetto nel server IIS locale (non il VS Development Server) questo lo risolve, il che è un po 'sconcertante. Sospetto che l'impostazione di un progetto su "Avvia" causi anche il collegamento di VS al processo per il debug.

http://msdn.microsoft.com/en-us/library/bb157685.aspx

+0

Mi ci sono voluti solo 4 ore per trovare questo post. Spacchi! –

+0

Ho problemi simili con il debugger, ma la modifica della configurazione x86/x64 non funziona sulla mia macchina. Client e server sono entrambi in esecuzione su 32 bit, ma ancora non posso entrare nel codice del servizio – Knasterbax

+1

+1 per un buon sol. – pordi

0

Ho avuto problemi simili. WCF host Host servizio WCF, richieste verificate da Client di test WCF. Il mio problema è stato causato dallo spazio nel nome della configurazione di build. Non appena ho usato il nome di configurazione senza spazi, ho lavorato.

Immagino che il vero problema fosse la cartella di output di compilazione che termina con la cartella nominata dal nome di configurazione.

0

@msulis - sì, grazie, questo è stato risolto per me. Ho anche cambiato di recente, la CPU di destinazione da qualsiasi a x86.Non potrei rispondere direttamente al tuo messaggio per qualche motivo, quindi scusati se questo emerge come una "risposta".

0

Sì, ho avuto lo stesso problema, WCF utilizza un'altra processs.

Finalmente ho trovato un modo, avvio una nuova istanza (debug-> avvia una nuova istanza) del servizio WCF prima, quindi avvio il lato client, i punti di interruzione nei colpi del servizio WCF!

1

Inoltre, quando si utilizza il debug VS e lo si collega al processo w3wp.exe e si hanno binding di porta specifici diversi da http: 80: * è necessario avere il debug> web in VS impostato sul sito e la porta http è in esecuzione su .

3

per Visual Studio multi-configurazioni:

nelle pagine delle proprietà della soluzione, assicurarsi che la "Configurazione" per il vostro web-servizio è impostato per "debug", non "Release".

1

Un altro motivo per non entrare in servizio WCF può essere la dimensione dei dati che viene passato ai metodi WCF.

Per es., Stavo passando un array di dobules di dimensioni 1000, e mi è stato sempre un errore di richiesta di cattivo (400) con il vedere come il metodo viene eseguito. Ho fatto la dimensione 500 e ora esegue il debug della WCF.

+0

Questo mi ha fatto pensare "anche il messaggio che sto mandando è uscito grande" (sto inviando file binari al servizio). Ridotto la dimensione del messaggio e risolto il problema! –

Problemi correlati