Ho appena incontrato un problema simile e nessuna delle risposte qui ha colpito il problema che stavo affrontando. A differenza della domanda, tuttavia, non ricevo mai alcun messaggio che affermi che non è stato possibile vincolare. Il punto di interruzione non colpisce mai. Spero che questo sia utile per qualcuno in futuro sbattere la testa sul muro con WCF.
TL / DR:
nel messaggio SOAP era presente un record con dati errati che impediva al punto di interruzione di essere colpito.
La storia completa:
Ho un servizio WCF basato su WSDL di un altro team. Non la mia definizione, nessun controllo su di essa ... Ricevo messaggi da questo altro team attraverso questo servizio. Nel mio caso ricevo messaggi, posso registrare il messaggio nella tabella di registro dei messaggi nel database (cosa che accade prima che il mio metodo di servizio venga chiamato), il metodo di servizio sembra essere chiamato (forse non lo è) e il server risponde con un 202 accettato. La comunicazione funziona, tranne per il fatto che nessun dato viene salvato nel database durante la chiamata del metodo.
Poiché il servizio restituisce una risposta positiva, ho escluso i problemi relativi a http e trasporto.
Quindi ho avviato VS2015 per eseguire il debug del servizio. Il messaggio in questione è ampio ma rientra nei limiti di ciò che mi aspetterei. Ho inserito un punto di interruzione nella prima riga del metodo di servizio e ho inviato il messaggio di grandi dimensioni, ma il punto di interruzione non ha mai raggiunto. Ho provato un messaggio più piccolo che sapevo funzionare sulla stessa istanza di esecuzione e il punto di interruzione è stato colpito bene. Quindi tutto nella configurazione sembrava a posto. Ho pensato che forse c'era qualcosa nella dimensione del messaggio.
Ho provato tutto ciò che sono riuscito a trovare, assicurandomi di trovarmi in una configurazione di debug, pulito e ricostruito, collegando manualmente il debugger al processo w3wp (come già VS), usando al Debugger.Break()
posto di un breakpoint, impostando più progetti di avvio, scaricando il mio progetto di test in modo che il progetto di servizio fosse l'unico, aggiornando .NET, riavviando VS2015, riavviando, passando da IIS locale a IIS Express e viceversa, ricreando il servizio con l'ultimo WSDL garantito. Nulla importava. Il breakpoint non è mai stato raggiunto.
Ho finito per dover cancellare i record nel messaggio grande uno per uno fino a quando ho trovato un singolo record con dati errati. Nel mio caso era un record che non aveva valore per 2 campi DateTime. Quando ho creato un messaggio che conteneva solo questo record e l'ho inviato, il punto di interruzione non è stato colpito. Quando ho fornito i valori per quei 2 campi DateTime e ho inviato lo stesso messaggio (fisso) nel punto di interruzione attivato come previsto.
Avevo abilitato ogni singola eccezione CLR, nulla veniva generato a parte i file .pbd mancanti, di cui non mi importava. WCF ha inviato felicemente la richiesta con un record negativo. Non sto dicendo che WCF non avrebbe dovuto inviarlo in base ai contratti, solo che il cattivo record non ha causato il breakpoint.