Ich bin gerade auf ein ähnliches Problem gestoßen, und keine der Antworten hier traf auf das Problem, mit dem ich konfrontiert war. Anders als in der Frage erhalte ich jedoch nie eine Nachricht, dass die Bindung fehlgeschlagen ist. Der Haltepunkt trifft einfach nie. Hoffentlich ist dies hilfreich für jemanden in der Zukunft, der mit WCF seinen Kopf gegen die Wand schlägt.
TL / DR:
In der SOAP-Nachricht gab es einen Datensatz mit fehlerhaften Daten, der dazu führte, dass der Haltepunkt nicht getroffen wurde.
Ganze Geschichte:
Ich habe einen WCF-Dienst basierend auf WSDL von einem anderen Team. Nicht meine Definition, keine Kontrolle darüber ... Ich erhalte über diesen Service Nachrichten von diesem anderen Team. In meinem Fall erhalte ich Nachrichten, kann die Nachricht in der Nachrichtenprotokolltabelle in der Datenbank protokollieren (was vor dem Aufruf meiner Dienstmethode geschieht), die Dienstmethode wird anscheinend aufgerufen (möglicherweise nicht) und der Server antwortet mit a 202 Akzeptiert. Die Kommunikation funktioniert, außer dass während des Methodenaufrufs keine Daten in der Datenbank gespeichert werden.
Da der Service eine erfolgreiche Antwort zurückgibt, habe ich http- und transportbezogene Probleme ausgeschlossen.
Also habe ich VS2015 gestartet, um den Dienst zu debuggen. Die fragliche Nachricht ist groß, aber innerhalb der Grenzen dessen, was ich erwarten würde. Ich habe einen Haltepunkt in die erste Zeile der Dienstmethode gesetzt und die große Nachricht durchgeschickt, aber der Haltepunkt wurde nie erreicht. Ich habe eine kleinere Nachricht ausprobiert, von der ich wusste, dass sie auf derselben Ausführungsinstanz funktioniert, und der Haltepunkt wurde einwandfrei erreicht. Also schien alles in der Konfiguration in Ordnung zu sein. Ich dachte, vielleicht liegt etwas in der Nachrichtengröße.
Ich habe alles versucht, was ich finden konnte - sicherstellen, dass ich mich in einer Debug-Konfiguration befand, bereinigen und neu erstellen, den Debugger manuell an den w3wp-Prozess (der VS bereits war) anhängen und verwenden Debugger.Break()
anstelle eines Haltepunkts mehrere Startprojekte und mein Testprojekt entladen Damit war das Dienstprojekt das einzige, das .NET aktualisiert, VS2015 neu startet, neu startet, von lokalem IIS zu IIS Express und zurück wechselt und den Dienst mit der garantierten neuesten WSDL neu erstellt. Nichts war wichtig. Der Haltepunkt wurde nie erreicht.
Am Ende musste ich die Datensätze in der großen Nachricht einzeln aussortieren, bis ich einen einzelnen Datensatz mit schlechten Daten fand. In meinem Fall war es ein Datensatz, der keinen Wert für 2 DateTime-Felder hatte. Als ich eine Nachricht mit nur diesem Datensatz erstellt und gesendet habe, wurde der Haltepunkt nicht erreicht. Als ich Werte für diese 2 DateTime-Felder angegeben und dieselbe (feste) Nachricht im Haltepunkt gesendet habe, wurde sie wie erwartet ausgelöst.
Ich hatte jede einzelne CLR-Ausnahme aktiviert, nichts anderes als fehlende .pbd-Dateien, die mir egal waren. WCF schickte die Anfrage glücklich mit einer schlechten Aufzeichnung durch. Ich sage nicht, dass WCF es aufgrund der Verträge nicht hätte durchschicken sollen, nur dass die schlechte Aufzeichnung dazu geführt hat, dass der Haltepunkt nicht erreicht wurde.